【发布时间】:2016-11-02 18:58:20
【问题描述】:
考虑我有以下sn-p:
IQueryable<BaseEntity> someQueryble = ApplicationDbContext.BaseEntities;
var randomQueryable = someQueryable.OfType<RandomEntity>()
.Include(prop => prop.SomeRandomNavProp)
.OrderBy(prop => prop.Id);
BaseEntities 只是来自 EF 6 的 ApplicationDbContext 的 DbSet。
RandomEntity 继承自 BaseEntity(Table-Per-Type 层次结构)
然后,奇怪的事情发生了:
randomQueryable.Take(10).Count();
10
randomQueryable.Take(10).ToList().Count;
20
删除Include 后,一切正常。为什么.include 会影响ToList,我该如何解决?
编辑:生成的 SQL:
注意 - 它来自生产数据库,因此可读性会受到影响。第一个查询是关于Count,第二个查询是关于ToList()
【问题讨论】:
-
只是想确认一下,您确定您使用的是 EF6 而不是 EF Core? Core 有一些与此类似的错误。
-
哈,这绝对是关键 -
Include在内部使用ORDER BY来正确关联数据,因此它需要确定性排序。 -
@pwas 是的,完全一样。虽然没有好的解决方案 - 我猜你想在
IQueryable上寻呼?如果没有,即如果您要实现结果,那么一些加载技巧而不是Include可能会有所帮助。让我知道是否是这种情况,但可能这应该是一个不同的问题。 -
@IvanStoev - 是的,分页是在 IQueryable 上完成的。但更重要的是 - 我已经改变了订购功能。看我的回答:) 谢谢你的帮助!
标签: c# entity-framework entity-framework-6