如何解决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)的功能。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。