我正在使用EF 6 Code First,我正面临一个设计决定:
我有一个抽象的实体,它由几个具体的实体实现,每个实体都向实体添加了几个属性。我有多态关联(基类有几个相关的实体),所以当在EF中映射它时,它为TPT继承提供了明确的案例。 (此处为读者提供更多信息:http://weblogs.asp.net/manavi/archive/2010/12/28/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-2-table-per-type-tpt.aspx)
我关心的是,我有几个案例,我只需要在基类上处理数据。具体来说,我有几个计划的批处理过程需要加载实体并执行计算和更新。
TPT继承将导致在所有子类型表上执行JOIN,这对我的情况来说是不必要的。
我的第二个选择是为父类型和子类型创建单独的具体实体,并完全忘记继承。
从SQL的角度来看,这些设计将是等效的。从面向对象的角度来看,此选项不正确。另外,从父母那里到达子实体不够 clean 。
就个人而言,我倾向于第二种设计(协会),因为我的大部分案例都会更简单,更简单。 (ORM工具处理的逻辑越少意味着更多的控制和简单性。)
我的问题是何时使用哪种设计。