小编afx*_*afx的帖子

如何在洋葱架构中使用来自 KendoUI 的 ToDataSourceResult 而不暴露 IQueryable

我正在设计具有 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)

linq asp.net-mvc onion-architecture kendo-grid

5
推荐指数
1
解决办法
1420
查看次数