如何使用EF6 Code First将Foreign Key属性公开给具有导航属性的现有实体

我有一个已经与底层数据库一起使用的实体,它只使用导航属性创建一个可选实体(1:0..1)。 因此,默认约定,EF根据该约定在DB中创建了一个可为空的外键列,并为其指定了带有下划线的“MyProp_Id”名称。

现在,我希望将该外键作为实体的属性公开,因为它会使某些场景更容易。 我不想重命名/更改DB中的基础外键列(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() .HasOptional(x => x.MyOptionalEntityB) .WithMany().HasForeignKey(x => x.MyOptionalEntityB_Id); // ^^^ -> if MyEntityB has collection of MyEntityA, mention it