【发布时间】:2011-04-13 12:59:17
【问题描述】:
我有一个用 C# 编码的 ASP.NET MVC 应用程序。应用程序的结构如下:
控制器
存储库
LINQ to Entities(实体框架)
查看
我使用存储库 (_ProductRep) 查询 LINQ to Entities 并将实际实体或 List<T> 提供给控制器,而不是 IQueriables<T>。
对于我有更多疑问的情况,我想获得一些帮助。我有以下代码:
List<Monthly_Report> lproduct_monthlyReport = _ProductRep.GetArchiveReport(product.Prod_ID, lmonth, lyear);
得到lproduct_monthlyReport 后,我需要在 foreach 中查询它并获取特定记录。目前我实现了这样的解决方案:
foreach (var item in litemList)
{
var lproductItem_monthlyReport = lproduct_monthlyReport.Single(m => m.Item_ID == item.Item_ID);
// Other code
}
其中litemList 是产品可以拥有的所有可能项目的列表。
我想知道这个解决方案是否明智地增加了耦合(并且违反了law of Demeter)或者它是可以接受的,因为我实际上是在查询List<T>而不是IQueriable<T>。如果我错了,请纠正我,但我猜由于 List 不需要访问 EF DataContext,因此 Controller 和 EF 之间没有耦合。
万一我错了,我能想到的唯一解决方案是用存储库方法替换查询(我仍然必须实现):
var lproductItem_monthlyReport_ProductRep.GetArchiveReport(product.Prod_ID, lmonth, lyear, item.Item_ID);
使用此解决方案,但是存储库在每个循环周期中使用 4 个条件进行一次查询,而在之前的解决方案中,存储库仅使用一个条件进行查询。
请您就这个问题给我指点一下吗?谢谢。
PS:我在循环中需要两个变量 lproduct_monthlyReport 和 lproductItem_monthlyReport,我不能只使用其中一个
PPS:我知道我应该在 Controller 和 Repository 之间建立一个业务服务层,这是我的下一步。
【问题讨论】:
标签: c# entity-framework asp.net-mvc-3 repository-pattern loose-coupling