与FK在一个方向上的一对一关系

时间:2014-11-19 22:02:21

标签: c# entity-framework ef-code-first one-to-one

如何获得以下关系才能在Entity2中生成FK?

  public class Entity1
  {
     public int Id { get; set; }

     public virtual Entity2 Entity2 { get; set; }
  }

  public class Entity2
  {
     public int Id { get; set; }

     public int? Entity1Id { get; set; }

     public virtual Entity1 Entity1 { get; set; }
  }

我希望Entity1能够获得对Entity2的引用(让EF延迟加载它),但我不希望Entity1在db中有一个FK到Entity2,我只是希望Entity2有一个FK到Entity1。这可能吗?我在我的数据库环境中尝试OnModelCreating的所有东西都没有得到我真正想要的东西。

我能得到的最接近的是:

  modelBuilder.Entity<Entity2>().HasOptional(e => e.Entity1).WithOptionalDependent(e => e.Entity2);

但是,这将创建具有Entity1Id列的Entity2表和Entity1的Entity1_Id FK列,而不是仅创建应该是FK到Entity1的单个Entity1Id列。

此外,如果有人问,Entity1Id属性是故意为可空的int,因为Entity2实例/表记录需要独立存在而没有到Entity1的链接。

1 个答案:

答案 0 :(得分:0)

删除OnModelCreating中的代码,并将此批注添加到Entity2

public class Entity2
{
 public int Id { get; set; }

 [ForeignKey("Entity1")]
 public int? Entity1Id { get; set; }

 public virtual Entity1 Entity1 { get; set; }

}

或者你可以尝试这个(我不知道它是否有效)

modelBuilder.Entity<Entity2>()
.HasOptional(e => e.Entity1)
.WithOptionalDependent(e => e.Entity2)
.Map(m => { m.MapKey("Entity1Id"); });