2011-05-30 102 views
1

我开始使用ADO.NET实体模型,并且我的所有对象都共享一些常用字段,例如FileAs(主键),SourceURL,NameDescription。除了这些领域,它们都非常不同。起初,我使用包含上述字段的抽象Reference类来实现它们,并让所有其他对象继承它们。然而,这迫使我我这样的查询我的对象的每一位:ADO.NET实体框架可以提供子类的集合而不是父类吗?

foreach (MyObject obj in context.References.Where(o=>o is MyObject)) { ... } 

我不想通过我Reference s到找到所有的MyObjects的每一个进行搜索,并想办法简单地致电foreach (var obj in context.MyObjects) { ... }

我可以只添加共享属性,每个MyObject类的,但随后FileAs不会是所有MyObject1 S和MyObject2 S之间唯一的。我可以做0..11关系Reference和所有MyObject s,但这会让一个Reference适用于几个不同类型的不同MyObject s。

+0

你如何生成你的实体?你在使用POCO T4模板吗? – 2011-05-30 22:02:50

+0

我在项目中添加了一个ADO.NET实体数据模型(.edmx)文件,并在其设计器中添加和编辑实体。它连接到本地数据库(.sdf)。我不确定T4模板是什么,对不起。 – dlras2 2011-05-30 22:05:53

回答

1

如果您使用默认实体生成与EF自定义工具(它将在您的EDMX下创建.Designer.cs文件)或从EntityObject派生的T4模板生成实体,那么在没有基本实体的情况下可能无法实现该实体。问题是由这些工具生成的所有实体必须从EntityObject继承。如果你想定义你自己的基类,你必须从EntityObject继承它,因此你必须映射它。在这种情况下使用实体继承模型有更多的缺点,然后查询。例如,每个实体PK在所有实体中必须是唯一的。

对于没有任何基类的POCO实体应该是可能的。您可以定义自己的基类并修改T4模板以将该类用作每个实体的父类。这不会解决EDMX中的问题 - 您仍然必须在设计器中的每个实体中定义和映射共享属性(设计人员不会知道父类)。

POCOs和T4模板只是EFv4(VS 2010)的功能。