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

本文关键字:方向 一对一 关系 一个 FK | 更新日期: 2023-09-27 18:31:17

如何让以下关系仅在实体 2 中生成 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; }
  }
我希望实体 1 能够获得对实体 2 的

引用(让 EF 延迟加载它),但我不希望实体 1 在数据库中具有对实体 2 的 FK,我只希望实体 2 具有对实体 1 的 FK。 这可能吗? 我在数据库上下文中尝试的所有内容 OnModelCreate 都没有得到我真正想要的东西。

我能得到的最接近的是:

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

但是,这将创建具有实体 1Id 列的实体 2 表和一个 Entity1 的 Entity1_Id FK 列,而不仅仅是创建应该是实体 1 的 FK 的单个 Entity1Id 列。

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

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

删除 OnModelCreation 中的代码,并将此注释添加到您的 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"); });