gpt4 book ai didi

c# - 如何返回 IQueryable 以供进一步查询

转载 作者:太空狗 更新时间:2023-10-29 23:00:14 25 4
gpt4 key购买 nike

我正在从这里尝试 PagedList.Mvc 库

https://github.com/TroyGoode/PagedList

有这个用法示例

var products = MyProductDataSource.FindAllProducts(); //returns IQueryable<Product> representing an unknown number of products. a thousand maybe?

var pageNumber = page ?? 1; // if no page was specified in the querystring, default to the first page (1)
var onePageOfProducts = products.ToPagedList(pageNumber, 25); // will only contain 25 products max because of the pageSize

MyProductDataSource.FindAllProducts() 的典型实现;沿着

public IQuerable<T> MyProductDataSource.FindAllProducts()
{
using ( var ctx = new MyCtx() )
{
return ctx.MyList().Where( .... );
}
}

当然有 InvalidOperationException() 和 DBContext is already disposed 消息

寻找有关如何返回 IQueryable 的最佳实践,可以在此处毫无问题地使用它?

最佳答案

好的做法是通过使用 IoC 容器将 DbContext 的生命周期保持为每个 HTTP 请求,大多数 IoC 容器都支持 HttpRequest 生命周期。

因此您可以利用 DbContext 的范围,它允许您在上层使用 IQueryable

有关我喜欢的两个 IoC 容器的更多信息:autofacninject

如何 autofachere 中支持 MVC

或者如何NInjecthere 中支持 MVC

如果您是 IoC 容器的新手,建议您看一下 dependency injection 的基本概念。来自马丁花。然后继续使用您选择的 IoC 容器之一。

但是,您需要非常小心如何使用 IQueryable 以及您应该停止支持它的层。否则,后面的魔鬼,从 Entity Framework 延迟加载会降低性能。我的规则之一是不支持 View 上的 IQueryable

关于c# - 如何返回 IQueryable<T> 以供进一步查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16447202/

25 4 0