我已经阅读了很多关于 MVC 架构中视图中的逻辑的问答,并且在大多数情况下,我同意业务逻辑不应该存在于视图中。然而话虽如此,当我将微软的 MVC 框架与实体框架结合使用时,我不断质疑我的方法,因为单个实体可以轻松访问外键关系,这最终导致我在一个内联执行 Linq to Entities 查询看法。
例如:
如果我有以下两个实体:
产品([PK]ProductId、标题、金额)
图片([PK]ImageId、[FK]ProductId、ImageTitle、DisplayOrder)
假设我有一个强类型的产品视图,并且我想显示主图像(最低显示顺序),那么我可以在视图中执行以下操作:
@{
Image image = (from l in Model.Image
orderby l.DisplayOrder
select l).FirstOrDefault();
}
这是一个用于演示目的的简单示例,但这肯定会开始扭曲与 MVC 架构相关的规则,但另一方面,在 Controller 中执行此操作,然后(天堂禁止)将其插入 ViewBag 或 ViewData 肯定只是像犯罪一样多,并且管理多个不同的相关课程变得痛苦。
我曾经为复杂的模型创建自定义类,但它既耗时又丑陋,而且我不再认为实体框架可以快速轻松地将视图定义为主要模型(在本例中为产品)和然后使用 Linq 查询轻松检索产品的所有外围组件。
我很想知道其他人如何处理这种情况。
编辑:
我也经常做这样的事情:
@foreach(Image i in Model.Image.OrderBy(e => e.DisplayOrder).ToList())
{
<img ... />
}