asp.net-mvc – 存储库模式 – 如何正确处理JOIN和复杂查询?
我有Repository模式的问题 – 如何在几个存储库之间执行JOIN操作.在这个项目中,我们使用MVC,EF,DDD.我知道这个问题在这里有好几次,我稍后会提到这些问题.
在通用存储库模型(IRepository)和特定存储库模型之间,我选择了特定的选项,因为我认为ORM(在我们的例子中是EF)作为通用存储库模式本身,所以增加另一个通用存储库是没有意义的,而是将存储库定制到域的需求. 问题是我有几个(?10)个表,每个都有很多行(百万),我需要执行JOIN,所以使用IList或IEnumerable是不可行的选择. 我的理解(和我的观点)是IQueryable不应该离开存储库(“DAL中会发生什么,应该保留在DAL”).暴露IQueryable并在LINQ中使用它可能会更简单,但是它强烈地违反了分离问题并破坏了存储库的作用 – 在这种情况下,服务将与存储库一样做.要选这几个,这些文章备份了这个观点(或者相信信念): To return IQueryable<T> or not return IQueryable<T> Should I return IEnumerable<T> or IQueryable<T> from my DAL? http://www.shawnmclean.com/blog/2011/06/iqueryable-vs-ienumerable-in-the-repository-pattern/ http://blog.ploeh.dk/2012/03/26/IQueryableTisTightCoupling/ 还有类似的问题和解决方案,例如How to join Multiple tables using Repository Pattern & Entity Framework?提示.Include(),但是这不是许多表中重载表和连接的选项 – 每个JOIN,我们使用子选择来限制实际加入的内容. 这个问题(答案和评论) – How can I query cross tables with Repository Pattern? – 基本上提出了基于任务的差异化:为JOINS查询创建一个Repository,并为每个实体操纵“常规”存储库. 我看到我们有这些选择: >在服务中暴露IQueryable和执行JOIN复杂查询;我真诚地觉得这是反模式,我不喜欢这样. 那么 – 你会建议什么?一次又一次,谢谢. 解决方法
意味着将持久性泄漏到应用程序中 – 反模式,意大利面条代码.
>如何与(1)不同?仍然是同一个问题. >有点靠近… >使用查询对象模式.将复杂查询封装在与存储库一起存在的基于任务的对象中.它可以返回为视图而不是域对象优化的DTO. >严格依靠QO将引导您进入称为CQRS – 命令查询责任分离的体系结构. 还有一件事.实体没有1:1的匹配:repo.只有聚合应该有一个存储库,而不是每一个实体. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 什么是Owin rememberBrowser做什么?
- 使用带有自定义角色提供程序的asp.net mvc 4登录失败时,错误
- asp.net – 为什么要模拟HttpContext,如果它可以构造?
- asp.net-mvc – ASP.NET MVC跟踪问题
- asp.net – Diffplex入门
- asp.net-mvc-5 – ASP.NET MVC中Controller的模型对象列表的
- asp.net – 由于Microsoft.Web.Services3.StateManager,无法
- VS2015如何创建单元测试并启动调试
- 在asp.net中删除字符串变量中的整数值
- 在Classic ASP中从ADODB调用参数化Oracle查询
- asp.net-web-api2 – SwashBuckle / Swagger –
- asp.net-mvc – 如何在MVC 5中使用用户身份中的角
- asp.net单文件带进度条上传的解决方案
- asp.net-mvc-5.1 – 如何在EnumDropDownListFor中
- 每个“HttpRequest”在ASP.NET中都有自己的线程吗
- asp.net-mvc – ASP.NET MVC路由冲突 – 输入变量
- asp.net-core – 如何在ASP.NET Core中共享汇编信
- asp.net – Windows Azure启动任务未触发
- 什么是在ASP.NET网站中嵌入视频的有效选项?
- asp.net – 无法加载程序集“App_Web_kh7-x3ka”