跟进此问题/答案
How to make Entity Framework Data Context Readonly

解决方案是使您的DbContext集合的类型为DbQuery,但这是一个相当特殊的类型(它埋在EF的 namespace 中)。

因此,具有DbContext的功能之间有什么区别:

public DbQuery<Customer> Customers
{
    get { return Set<Customer>().AsNoTracking(); }
}

与这个:
public IQueryable<Customer> Customers
{
    get { return Set<Customer>().AsNoTracking(); }
}

...关于DbQuery类,EF文档非常简单,但是我更喜欢让DbContext由接口(interface)而不是由类组成的想法,因此我想避免这种情况。 DbQuery类还提供哪些其他好处?

更新

阅读答案并查看代码后,我意识到我的问题有点愚蠢。我想得太快了!显然,底层的具体对象无论如何都将是DbQuery,因此实际的内部功能将是相同的。在我看来,使用IQueryable是更好的选择。谢谢你的耐心!

最佳答案

DBQuery是针对DbContext的非通用LINQ to Entities查询。公开此内容将为您提供针对实体的LINQ功能。如果不需要它,请使用IQueryable接口(interface)抽象。

IOrderedQueryable

旨在由查询提供者实现。
此接口(interface)表示排序查询的结果,该查询调用方法OrderBy,OrderByDescending,ThenBy或ThenByDescending。调用CreateQuery并传递表示排序查询的表达式树时,生成的IQueryable对象必须具有实现IOrderedQueryable的类型。
IListSource

为对象提供功能以返回可以绑定(bind)到数据源的列表。
IDbAsyncEnumerable

IEnumerable接口(interface)的异步版本,该版本允许异步检索元素。此接口(interface)用于与Entity Framework查询进行交互,并且不应由自定义类实现。

关于c# - IQueryable和DbQuery有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27624426/

10-13 06:00