【发布时间】:2017-11-12 19:22:13
【问题描述】:
我正在学习 EF6,我想我已经知道了很多,但是(还)找不到一个好的解决方案:
假设我有以下模型类:
class LivingRoom {
public int Id { get; set; }
public string Name { get; set; }
public PersonTypeId { get; set; }
public IList<Person> Persons { get; set; }
}
class Person {
public int Id { get; set; }
public int PersonTypeId { get; set; }
public string Name { get; set; }
}
使用这些模型类,我可以毫无问题地通过 DbContext 进行保存和加载。由于“父” LivingRoom 类中的导航属性,Persons 集合将包含在此过程中。我不必单独加载/保存它们。
更新:忘记了逻辑 PersonTypeId 字段,该字段将用于确定哪些 Persons 应该在集合属性中。
到目前为止一切顺利。
但是 EF6 正在 Persons 表中创建一个 FK,指向 LivingRooms 表,这似乎是合乎逻辑的。
但是,如果我要将 Persons 表用于更多其他父实体,例如,例如。 “Bus”和“Plane”,因此不想在 Persons 表中有依赖项(= LivingRooms 表中的 FK 字段)?
我可以在不破坏“包含子列表”加载/保存过程的情况下实现这一点(不要创建 FK 字段)吗?
如果是,如何?如果没有,为什么不呢?
注意:请理解我想学习最好的技术。所以好的建议,不要这样做,也是受欢迎的。
【问题讨论】:
-
如果
Person是LivingRoom、Bus、Plane等的一部分,如果不将该信息存储在Person表的FK 列中,您将如何确定?这不是 EF 特有的,而是关系数据库设计问题。 -
不想有依赖项 这是一种常见的(反)模式,称为 多态关联,我有 my own struggles with .关系数据库不提供平滑建模此类关联的概念基础,因此除非您愿意转向 NoSQL 数据库,否则您将不得不采用一种或多或少不舒服的解决方案。
标签: c# entity-framework entity-framework-6