2012-07-03 53 views
1

在数据库中,我们有名为Sites,Organizations,Person,Department的表格具有相同的结构,如LookupID,Description等 ,还有其他一些表格,如问题,答案等。这些表格与上面的列有相同的列,有两个或三个额外的列。将表格乘以实体框架代码中的单个实体第一个

什么是最好的方式来实现这使用实体框架Code-First。

在代码方面我想查找类具有共同的属性,然后对问题等一些性质

我怎么也想不到,我将能够告诉EF加载希望查找,因为(我不能有类型的站点,组织等,因为这些都是查找等

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

感谢,

回答

2

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

这是可能实现database first (EDMX)code first方法,这映射,但它可以有一些性能问题,当您尝试查询这些表。如果只查询一般查找,EF将始终加入所有派生表,因为它不知道哪些包含您需要的特定字段。我不确定这是否也发生在TPC继承中,但是EF有时会加入所有继承的表,即使您明确地告诉它您想要查询特定的类型 - 这在其他形式的继承(TPT)中尤其是问题,但它应该是在.NET 4.5中解决。

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

+0

感谢您的回复,但我不知道我将如何告知EF加载查找我想要的,因为(我不能有类型为网站,组织等,因为这些都是查找等 – daljit

+0

没有他们不仅仅是查找,它们有特定的字段 - 你必须在它们之间有所不同,否则你必须创建一个包含所有列的联合的单一视图,其中一个表的特定列在其他表的记录中将是空的 –

+0

,我应该创建一个像字符串值类型的属性,不应该映射到数据库,是可能的吗?是否有任何示例等。非常感谢您的帮助 – daljit

相关问题