1

在数据库中,我们有名为 Sites、Organisations、Person、Department 的表具有相同的结构,如 LookupID、Description 等,还有一些其他表,如 Question、Answer 等。这些表具有与上面相同的列,但有两个或三个额外的列。

使用 Entity Framework Code-First 实现这一点的最佳方法是什么。

在代码方面,我在考虑具有公共属性的查找类,然后是问题等的更多属性。

我想不出我将如何告诉 EF 加载我想要的查找,因为(我不能将类型设置为站点、组织等,因为这些都是查找等。

版本不是问题,我们可以使用最新的版本,因为这是新项目。

谢谢,

4

1 回答 1

2

这听起来像每类表 (TPC) 继承。您将 Lookup 实体建模为基本抽象类,并从 Lookup 实体派生所有其他实体。派生类将仅声明特定字段。在数据库中,每个派生实体将表示为具有共享字段和派生字段的单独表。

可以在数据库优先 (EDMX)代码优先方法中实现此映射,但是当您尝试查询这些表时,它可能会对性能产生一些影响。如果您仅查询常规查找,EF 将始终连接所有派生表,因为它不知道哪些包含您需要的特定字段。我不确定这是否也发生在 TPC 继承中,但 EF 有时会加入所有继承的表,即使您明确告诉它要查询特定类型 - 这在其他形式的继承 (TPT) 中尤其存在问题,但应该是在 .NET 4.5 中解决。

编辑:有一个细节我忘了提。EF 中的每个实体都必须由其密钥唯一标识。如果您映射继承,则继承层次结构中的每个实体都必须由其键唯一标识。这意味着您的所有查找表都必须使用唯一的键值。

于 2012-07-03T12:16:47.037 回答