在数据库中,我们有名为Sites,Organizations,Person,Department的表具有与LookupID,Description等相同的结构。 还有一些其他的表,如问题,答案等。这些表格与上面的列相同,有两到三个额外的列。
使用Entity Framework Code-First实现此目的的最佳方法是什么。
在代码方面,我认为LookUp Class具有常见的属性,然后是一些问题等的属性
我无法想象我将如何告诉EF加载我想要的查找,因为(我不能将类型设置为Site,Organization等,因为这些都是查找等。
版本不是问题我们可以使用最新版本,因为这是新项目。
谢谢,
答案 0 :(得分:2)
听起来像每个类的表(TPC)继承。您将Lookup实体建模为基本抽象类,并从Lookup实体派生所有其他实体。派生类将仅声明特定字段。在数据库中,每个派生实体将表示为具有共享和派生字段的separete表。
可以在database first (EDMX)和code first方法中实现此映射,但在尝试查询这些表时可能会产生一些性能影响。如果只查询常规查找,EF将始终连接所有派生表,因为它不知道哪些包含您需要的特定字段。我不确定TPC继承中是否会发生这种情况,但即使您明确告诉它要查询特定类型,EF有时会加入所有继承的表 - 这在其他形式的继承(TPT)中尤其有问题,但它应该是在.NET 4.5中解决。
编辑:我忘了提一个细节。 EF中的每个实体必须由其密钥唯一标识。如果映射继承,则继承层次结构中的每个实体都必须由其键唯一标识。这意味着所有查找表都必须使用唯一键值。