实体框架4:为什么我不能获得派生实体的ObjectSet而不是ObjectQuery?

时间:2011-04-19 11:59:19

标签: entity-framework inheritance entity-framework-4

我有一个“投资”实体,派生自“BaseEntity”。

使用_container.BaseEntities.OfType<Investment>()我得到一个始终查询数据库的ObjectQuery。

因此我宁愿拥有ObjectSet<Investment>

我无法理解为什么EF不支持派生实体...或者它呢? ;)

如果我继续在EF中创建一个“根实体”(这将是愚蠢的)与所有派生实体的关联,我将通过该一个根实体的导航属性获得这些实体的EntityCollections。但必须有另一种方式......

干杯

2 个答案:

答案 0 :(得分:1)

这就是它在EF ObjectContext API中的工作方式。如果您尝试为派生实体创建ObjectSet,您将获得:

  

ArgumentException:没有   为指定定义的EntitySet   实体类型'投资'。如果   '投资'是派生类型,使用   而是基类型。参数名称:   TEntity

一旦定义了继承,派生实体就没有导航属性。提供导航属性的关联更改为继承。

我也跟着你的former questions,这可能是这个的来源,我不得不说我尝试了很多,但我永远不会得到你的行为。即使我直接将Count调用ObjectSet,我总是得到SQL查询(在探查器中检查)和数据库中的实体计数 - 而不是在集合中。

答案 1 :(得分:0)

ObjectQuery<T>并不总是查询数据库。它只是一个查询规范 - 在这种情况下是一个规范,用于返回类型为Investment的所有BaseEntity。您可以使用其他过滤器或orderby子句或投影等来组合它。在应用ToList()First()之类的贪婪运算符之前,或者在应用foreach循环来获取结果之前,数据库中不会执行任何操作。