gpt4 book ai didi

asp.net-mvc - 如何在 Onion 架构中使用来自 Kendo UI 的 ToDataSourceResult 而不暴露 IQueryable

转载 作者:行者123 更新时间:2023-12-02 07:33:51 27 4
gpt4 key购买 nike

我正在使用 Onion 架构设计应用程序,我想使用 Kendo UI 中的网格以及服务器端过滤排序和分页。我想避免手动将 DataSourceRequest 解析为动态 LinQ,而是使用 ToDataSourceResult。

我找到了工作解决方案,其中我的 Controller 包含以下内容:

    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);

}

ISalesService 映射到我使用存储库的实现,代码如下:

    public IQueryable<SalesOrderHeader> GetQueryableSales()
{
if (context == null)
context = new AdventureWorks2012Context();

return context.SalesOrderHeaders;
}

这只是应用程序的骨架,因此服务和存储库中没有任何逻辑。这样我可以避免手动解析 DataSourceRequest,但代价是将 IQueryable 暴露给 MVC 层。我想将 IQueryable 保留在存储库中,并在可能的情况下公开 IEnumerable,或者可能是来自 Kendo UI 库的 DataSourceResult。

我尝试更改我的存储库调用,如下所示:

    public DataSourceResult GetSales(DataSourceRequest request)
{
using (var c = new AdventureWorks2012Context())
{
var headersQuery = c.SalesOrderHeaders;

var result = headersQuery.ToDataSourceResult(request);

return result;
}
}

这样我就可以将 IQueryabl 保留在存储库中,并且仍然使用自动 DataSourceRequest 转换为 Kendo UI 提供的动态 LinQ。但这需要从我的数据层引用 Kendo.Mvc 和 System.Web.Mvc,这似乎也不是一个好的选择。

所以我的问题是,是否可以在不影响应用程序分层的情况下自动将 DataSourceRequest 转换为 LinQ?我在 Kendo UI 架构中遗漏了一些东西吗?或者我必须选择手动解析 DataSourceRequest 或在某种程度上损害我的架构?

最佳答案

未引用 Kendo 的存储库方法:

public T GetSales<T>(Func<IQueryable<SalesOrderHeader>, T> processQueryable)
{
using (var c = new AdventureWorks2012Context())
{
return processQueryable(c.SalesOrderHeaders);
}
}

要使用它,您需要一个函数来处理 iqueryable 作为参数,在本例中它返回一个 DataSourceResult:

public JsonResult Post([DataSourceRequest] DataSourceRequest request)
{
DataSourceResult sales = salesService.GetSales<DataSourceResult>(headersQuery=>headersQuery.ToDataSourceResult(request));

return Json(sales , JsonRequestBehavior.AllowGet);
}

关于asp.net-mvc - 如何在 Onion 架构中使用来自 Kendo UI 的 ToDataSourceResult 而不暴露 IQueryable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29476507/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com