我有一个已经与底层数据库一起使用的实体,并且它是使用可选实体(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");
NO DICE
有没有办法做到这一点?这是否清楚且有意义?
尝试添加外键属性.
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)