【问题标题】:Query to get only root/base entities in EF Code first查询以首先获取 EF 代码中的根/基本实体
【发布时间】:2012-07-20 11:40:15
【问题描述】:

假设:

BaseEntity
ChildEntity : BaseEntity

问题在于以一种有效的方式获取基础实体。我知道有效的是这种类型的查询:

var results = context.BaseEntities.Where(entity => !(entity is ChildEntity) );

但是,这非常容易被破坏,因为简单地向BaseEntity 添加另一个扩展名,例如ChildEntityTwo : BaseEntity 会破坏查询(查询将包括BaseEntityChildEntityTwo 类型。

另外,我还没有机会对其进行分析,但我怀疑查询会下载所有实体并在内存中过滤它们,但我可能错了。

请注意,context.BaseEntities.OfType<BaseEntities>() 解决方案实际上也将包含并下载所有实体!它仅在您需要端点类时才有效,例如 ChildEntityTwo

【问题讨论】:

标签: linq linq-to-entities ef-code-first entity-framework-5


【解决方案1】:

ESQL 为此提供了OFTYPE ONLY 运算符,但该运算符在Linq 中没有任何等效项。您可以使用 this workaround 为 Linq 构建 OFTYPE ONLY

【讨论】:

  • 感谢您的回复!使用解决方法,加上这个链接:stackoverflow.com/questions/11252096/…,它有助于访问对象上下文,但它使用魔术字符串。知道如何在没有魔术字符串的情况下做到这一点吗?
  • 此外,有什么方法可以在 ICollection 导航属性上使用此扩展?我们说话的时候我也在研究这个。
  • 我也在四处窥探,发现了这个'msdn.microsoft.com/en-us/library/…',但我完全不知道如何访问 CommandTree
  • 看起来这是一个底层,除了 ESQL 之外不容易获得
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-23
  • 2012-05-09
  • 1970-01-01
  • 1970-01-01
  • 2013-04-22
  • 1970-01-01
  • 2013-09-01
相关资源
最近更新 更多