我正在设计使用Onion体系结构的应用程序,并且我想使用Kendo UI中的网格进行服务器端过滤排序和分页。我想避免手动将DataSourceRequest解析为动态LinQ,而是使用ToDataSourceResult。如何从KendoUI在Onion体系结构中使用ToDataSourceResult而不公开IQueryable
我来工作的解决方案,在我的控制器包含以下内容:
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转化成剑道UI提供动态LINQ的支持。但是这需要从我的数据层引用Kendo.Mvc和System.Web.Mvc,这似乎不是一个好的选择。
所以我的问题是,是否有可能自动将DataSourceRequest转换为LinQ,而不会影响应用程序分层?我在Kendo UI架构中遗漏了什么?或者,我必须选择手动解析DataSourceRequest,还是要牺牲我的体系结构?
我有同样的问题,似乎你需要将依赖关系添加到syste.web.mvc到数据层才能使其工作。一种痛苦。 – lucuma