繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM