ASP.NET MVC - Linq to Entities模型作为ViewModel - 这是一个好习惯吗?

时间:2009-09-30 15:34:09

标签: asp.net asp.net-mvc viewmodel

真的很快。

我目前正在使用asp.net MVC和实体框架构建一个站点。我有几个存储库,它们返回实体或实体列表。我发现在我的大多数页面中,我不得不从各种相关表中提取数据。只要我在查询中使用“include”加载相关实体,这是可以的 - 但这是一个好习惯吗?

创建一个包含我需要的信息的自定义viewmodel对象会不会更好,或者拉动一个可能有5-6个表深度的对象图只是为了显示你需要的东西“没有错”在你看来?

如果这个问题没有多大意义,请道歉。我可能从根本上误解了应该如何使用模型:)

由于

2 个答案:

答案 0 :(得分:3)

如果您的观点开始执行

之类的操作

<% foreach (var order in Model.Orders.Any(x => x.Products.Any(p => p.Category == "xx")) %>

然后你肯定需要ViewModel。你可以选择

ViewData["flattened_orders"]

如果你喜欢魔术弦,但我对此表示怀疑。

然后,您的实体需要显示属性的问题,然后您需要公开它们上的所有属性,以便模型绑定器可以工作...然后您需要其他仅呈现信息,例如国家/地区列表... < / p>

因此,对于简单的应用程序,您可以跳过ViewModel。但是对于简单的应用程序,无论如何都可以执行Response.Write和手动SQL; - )

我实际上喜欢this关于类似问题的帖子。这里所代表的方法起初可能看起来太“学术化”了,但它来自真实的项目,而且我做的ASP.NET MVC越多,我就越喜欢它并接近它。

答案 1 :(得分:2)

我建议您查看视图中的渲染代码以及控制器中的发布代码。你采取的方法是否过于复杂?如果没有,你可能会保持现状。如果通过引入自定义视图模型来大大简化视图和控制器代码,则考虑创建一个。自定义视图模型基本上抽象了一些可能在目前其他地方处理的复杂性。