我正在设计具有 Onion 架构的应用程序,并且我想将 Kendo UI 中的网格与服务器端过滤排序和分页一起使用。我想避免手动将 DataSourceRequest 解析为动态 LinQ,而是使用 ToDataSourceResult。
我来到了工作解决方案,其中我的控制器包含以下内容:
private ISalesService salesService;
public HomeController(ISalesService salesService)
{
this.salesService = salesService;
}
public JsonResult Post([DataSourceRequest] DataSourceRequest request)
{
var sales = salesService.GetQueryableSales();
return Json(sales , JsonRequestBehavior.AllowGet);
}
Run Code Online (Sandbox Code Playgroud)
ISalesService 映射到我使用存储库的实现,代码如下:
public IQueryable<SalesOrderHeader> GetQueryableSales()
{
if (context == null)
context = new AdventureWorks2012Context();
return context.SalesOrderHeaders;
}
Run Code Online (Sandbox Code Playgroud)
这只是应用程序的一个骨架,因此在服务和存储库中都没有逻辑。这样我就可以避免手动解析 DataSourceRequest,但代价是将 IQueryable 暴露给 MVC 层。我想将 IQueryable 保留在存储库中,并在可能的情况下公开 IEnumerable,或者可能来自 Kendo UI 库的 DataSourceResult。
我尝试更改我的存储库调用如下:
public DataSourceResult GetSales(DataSourceRequest request)
{
using (var c = new AdventureWorks2012Context())
{ …Run Code Online (Sandbox Code Playgroud)