如何使用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");

不行

有办法做到这一点吗?明白了吗?

如何使用EF6代码优先将外键属性暴露给具有导航属性的现有实体

尝试添加外键属性。

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