如何使用EF6代码优先将外键属性暴露给具有导航属性的现有实体
本文关键字:属性 暴露 导航 实体 代码 EF6 何使用 | 更新日期: 2023-09-27 18:15:45
我有一个已经与底层数据库一起使用的实体,它是用一个可选实体(1:0..1)的导航属性创建的。因此,根据默认约定,EF在DB中创建了一个可空的外键列,并根据该约定将其命名为"MyProp_Id",并带有下划线。
现在,我希望将该外键作为实体的属性公开,因为它将使某些场景对我来说更容易。我不想重命名/更改数据库中的基础外键列(MyProp_Id之一)。实际上,不应该有任何底层的DB更新,我只想在实体上公开FK。一个代码示例来说明:
public class MyEntityA
{
public long Id { get; set; }
//public long? MyOptionalEntityB_Id { get; set; } <== this is what I am trying to add
//public long? MyOptionalEntityBId { get; set; } <== this didn't work either
public MyEntityB MyOptionalEntityB { get; set; }
}
我试过只是简单地添加"MyOptionalEntity_Id"属性作为实体上的属性,希望EF会"自动"看到,因为名称是相同的,它只会映射和快乐。不行。
然后我试图命名我的属性"MyOptionalEntityId"(没有下划线),但仍然没有骰子。
然后我尝试添加一个显式的映射配置,说:
this.Property(p => p.MyOptionalEntityId).HasColumnName("MyOptionalEntity_Id");
不行
有办法做到这一点吗?明白了吗?
尝试添加外键属性。
public long? MyOptionalEntityB_Id { get; set; }
[ForeignKey("MyOptionalEntityB_Id")]
public MyEntityB MyOptionalEntityB { get; set; }
或者使用fluent api
modelBuilder.Entity<MyEntityA >()
.HasOptional(x => x.MyOptionalEntityB)
.WithMany().HasForeignKey(x => x.MyOptionalEntityB_Id);
// ^^^ -> if MyEntityB has collection of MyEntityA, mention it