我有一个用 C# 编码的 ASP.NET MVC 应用程序。该应用程序的结构如下:
控制器
存储库
LINQ to Entity(实体框架)
看法
我使用 Repository( _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
产品可以拥有的所有可能项目的列表在哪里。
我想知道这个解决方案是否明智地增加了耦合(并且违反了Demeter 定律)或者它是可以接受的,因为我实际上是在查询 aList<T>
而不是 a IQueriable<T>
。如果我错了,请纠正我,但我猜由于 List 不需要访问 EF DataContext,因此 Controller 和 EF 之间没有耦合。
如果我错了,我能想到的唯一解决方案是用 Repository 方法替换查询(我仍然必须实现):
var lproductItem_monthlyReport_ProductRep.GetArchiveReport(product.Prod_ID, lmonth, lyear, item.Item_ID);
但是,使用此解决方案,存储库在每个循环周期中使用 4 个条件进行一次查询,而在之前的解决方案中,存储库仅使用一个条件进行查询。
能否请您就这个问题赐教?谢谢。
PS:我需要两个变量lproduct_monthlyReport
和lproductItem_monthlyReport
循环内部,我不能只使用其中一个
PPS:我知道我应该在 Controller 和 Repository 之间建立一个业务服务层,这是我的下一步。