我有一个“投资”实体,派生自“BaseEntity”。
使用_container.BaseEntities.OfType<Investment>()
我得到一个始终查询数据库的ObjectQuery。
因此我宁愿拥有ObjectSet<Investment>
。
我无法理解为什么EF不支持派生实体...或者它呢? ;)
如果我继续在EF中创建一个“根实体”(这将是愚蠢的)与所有派生实体的关联,我将通过该一个根实体的导航属性获得这些实体的EntityCollections。但必须有另一种方式......
干杯
答案 0 :(得分:1)
这就是它在EF ObjectContext API中的工作方式。如果您尝试为派生实体创建ObjectSet
,您将获得:
ArgumentException:没有 为指定定义的EntitySet 实体类型'投资'。如果 '投资'是派生类型,使用 而是基类型。参数名称: TEntity
一旦定义了继承,派生实体就没有导航属性。提供导航属性的关联更改为继承。
我也跟着你的former questions,这可能是这个的来源,我不得不说我尝试了很多,但我永远不会得到你的行为。即使我直接将Count调用ObjectSet
,我总是得到SQL查询(在探查器中检查)和数据库中的实体计数 - 而不是在集合中。
答案 1 :(得分:0)
ObjectQuery<T>
并不总是查询数据库。它只是一个查询规范 - 在这种情况下是一个规范,用于返回类型为Investment
的所有BaseEntity。您可以使用其他过滤器或orderby子句或投影等来组合它。在应用ToList()
或First()
之类的贪婪运算符之前,或者在应用foreach循环来获取结果之前,数据库中不会执行任何操作。