实体框架核心:无外键的单向导航属性

时间:2020-09-08 09:19:13

标签: c# asp.net-core entity-framework-core entity-framework-core-3.1

我的课程配置如下:

class Item {
  Guid ParentId { get; set; }
  // ... 
}

class ClassWithItemCollectionA {
  Guid Id { get; set; }
  ICollection<Item> Items { get; set; }
  // ...
}

class ClassWithItemCollectionB {
  Guid Id { get; set; }
  ICollection<Item> Items { get; set; }
  // ...
}

我想填充ClassWithItemCollectionA.ItemsClassWithItemCollectionB.Items导航属性,将实体与Item.ParentId -> ClassWithItemCollectionA.IdItem.ParentId -> ClassWithItemCollectionB.Id连接起来。

我尝试了不同的方法,但是最终却获得了令人讨厌的结果。

  • 如果让EF Core创建导航属性,则会为我添加了Item集合的每种实体类型创建一个额外的列。
  • 如果我强制EF Core使用ParentId作为外键,它将创建没有额外列的数据库架构,但是会创建额外的约束,使我无法在Item表中插入任何内容。
  • 我可以将Items集合设为未映射,并进行额外的查询以针对每个ClassWithItemCollectionX填充它,从而导致N + 1问题。

有什么方法可以定义这样的基类:

class BaseClassWithItemCollection {
  Guid Id { get; set; }
  ICollection<Item> Items { get; set; }
}

然后指定如何检索Items集合,或通过其他任何方式达到我所寻找的目的?

0 个答案:

没有答案