[英]How to expose Foreign Key property to existing entity having navigational property using EF6 Code First
我有一个已经在基础数据库中使用的实体,它是通过仅将导航属性创建到一个可选实体(1:0..1)而创建的。 因此,根据默认约定,EF根据该约定在数据库中创建了一个可为空的外键列,并为其添加了带下划线的“ MyProp_Id”名称。
现在,我希望将外键作为实体的属性公开,因为这会使某些情况对我来说更容易。 我不想重命名/更改数据库中的基础外键列(MyProp_Id之一)。 实际上,不应有任何底层数据库更新,我只想在实体上公开该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; }
或使用流利的api 。
modelBuilder.Entity<MyEntityA >()
.HasOptional(x => x.MyOptionalEntityB)
.WithMany().HasForeignKey(x => x.MyOptionalEntityB_Id);
// ^^^ -> if MyEntityB has collection of MyEntityA, mention it
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.