ADO.NET实体框架可以提供子类而不是父类的集合吗?

问题描述

| 我开始使用ADO.NET实体模型,我的所有对象都共享一些公共字段,例如
FileAs
(主键),
SourceURL
Name
Description
。除了这些字段,它们都非常不同。首先,我使用抽象的
Reference
类来实现它们,该类包含上述字段,并让我的所有其他对象继承该字段。但是,这迫使我查询这样的每个对象:
foreach (MyObject obj in context.References.Where(o=>o is MyObject)) { ... }
我不想遍历我的所有ѭ4来查找所有ѭ7,而是想要一种简单地调用ѭ8的方法。 我可以将共享属性添加到每个
MyObject
类中,但是
FileAs
在所有
MyObject1
MyObject2
之间并不是唯一的。我可以在ѭ4和所有ѭ9之间建立ѭ13到ѭ14的关系,但这会使一个ѭ4应用于多个不同类型的ѭ9。     

解决方法

        如果您使用带有EF自定义工具的默认实体生成(它将在EDMX下创建.Designer.cs文件)或从“ 19”派生的T4模板生成实体,那么没有基础实体可能无法实现。问题是这些工具生成的所有实体都必须继承ѭ19。如果要定义自己的基类,则还必须从
EntityObject
继承它,因此必须映射它。在这种情况下使用实体继承模型比查询具有更多的缺点。例如,每个实体PK在所有实体中必须是唯一的。 没有任何基类的POCO实体应该有可能。您可以定义自己的基类并修改T4模板以将该类用作每个实体的父类。这不会解决EDMX中的问题-您仍然必须在设计器中的每个单个实体中定义和映射共享属性(设计器不会知道父类)。 POCO和T4模板只是EFv4(VS 2010)的功能。