跟进这个问题/答案
如何使实体框架数据上下文只读 https://stackoverflow.com/questions/10437058/how-to-make-entity-framework-data-context-readonly
解决方案是使 DbContext 集合具有 DbQuery 类型,但这是一个相当专业的类型(它隐藏在 EF 的命名空间中)。
那么,拥有 DbContext 与此之间的功能区别是什么:
public DbQuery<Customer> Customers
{
get { return Set<Customer>().AsNoTracking(); }
}
vs this:
public IQueryable<Customer> Customers
{
get { return Set<Customer>().AsNoTracking(); }
}
...当涉及到 DbQuery 类时,EF 文档非常简单,但我更喜欢由接口而不是类组成 DbContext 的想法,因此我想避免它。 DbQuery 类还提供哪些额外好处?
Update
阅读答案并查看代码后,我意识到我的问题有点愚蠢。我来得太快了,还没想到就问了!显然,底层的具体对象无论如何都是一个 DbQuery,因此实际的内部功能将是相同的。在我看来,使用 IQueryable 是更好的选择。谢谢你的耐心!
DBQuery http://msdn.microsoft.com/en-us/library/system.data.entity.infrastructure.dbquery%28v=vs.113%29.aspx是针对 DbContext 的非通用 LINQ to Entities 查询。公开它将为您提供针对实体的 LINQ 功能。如果您不需要这个,请使用IQueryable
接口抽象。
IOrderedQueryable
旨在由查询提供者实施。
此接口表示调用 OrderBy、OrderByDescending、ThenBy 或 ThenByDescending 方法的排序查询的结果。当调用 CreateQuery 并传递表示排序查询的表达式树时,生成的 IQueryable 对象必须是实现 IOrderedQueryable 的类型。
IListSource
为对象提供返回可绑定到数据源的列表的功能。
IDbAsyncEnumerable
IEnumerable 接口的异步版本,允许异步检索元素。此接口用于与实体框架查询交互,不应由自定义类实现。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)