【问题标题】:ASP.NET MVC - Linq to Entities model as the ViewModel - is this good practice? [closed]ASP.NET MVC - Linq to Entities 模型作为 ViewModel - 这是一个好习惯吗? [关闭]
【发布时间】:2010-12-02 16:55:36
【问题描述】:

真的是快速提问。

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

创建一个只包含我需要的信息位的自定义视图模型对象会更好吗,或者拉一个可能有 5 到 6 个表深的对象图只是为了显示你需要的东西没有任何“错误”吗?在你看来?

如果这个问题没有太大意义,我们深表歉意。我可能从根本上误解了应该如何在这里使用模型:)

谢谢

【问题讨论】:

  • 好问题,有兴趣听听回答。
  • +1,我有一个关于使用 DTO 代替实体模型的类似问题:stackoverflow.com/questions/1450209/…
  • 感谢 Brandon - 刚刚阅读您的帖子,是的,我们似乎确实关心类似的事情。有时我担心我花了太多时间担心最佳实践:)

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


【解决方案1】:

如果你的视图开始做类似的事情

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

那么你肯定需要 ViewModel。你可以去

ViewData["flattened_orders"]

如果你更喜欢魔术字符串,但我怀疑。

然后,您的实体需要演示属性的问题,然后您需要公开它们的所有属性以便模型绑定器可以工作......然后您需要额外的仅演示信息,如国家列表......

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

我其实很喜欢 this 关于类似问题的帖子。那里所代表的方法一开始可能看起来太“学术”,但它来自真实的项目,我越做 ASP.NET MVC,我就越喜欢它,也越来越接近它。

【讨论】:

  • 谢谢,这是一些很好的建议。我发现我必须浏览数字实体关系才能获得我需要的东西,并且开始认为数据越扁平越好。
【解决方案2】:

我建议您查看视图中的渲染代码和控制器中的发布代码。您采用的方法是否使它们过于复杂?如果不是,您可能可以保持原样。如果通过引入自定义视图模型可以大大简化视图和控制器代码,那么请考虑创建一个。自定义视图模型本质上抽象了一些目前可能正在其他地方处理的复杂性。

【讨论】:

  • 有道理。基本上,我目前有一种情况,我正在从我的实体模型中提取各种“表”。组织->建筑物->房间->资产。当我显示一个资产的详细信息时,我还需要显示它的房间和建筑信息。目前我只是抓取一个相当大的对象图并在视图中拉出我需要的东西。我只是担心我从模型中带回了太多东西。但是....它确实有效。
猜你喜欢
  • 2020-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-15
  • 2015-08-03
  • 1970-01-01
  • 2014-08-11
  • 2011-10-21
相关资源
最近更新 更多