asp.net-mvc - MVC 3 代码优先 ViewModel - 如何?

标签 asp.net-mvc c#-4.0 viewmodel code-first

我目前正在使用 ASP .NET MVC 3 和 Entity Framework 的代码优先方法(用于数据访问)。

我阅读了大量文档、博客、stackoverflow 问题等,但尚未找到以下问题的准确答案,我希望有人可以帮助我。

我有一个简单的(数据库)模型,包含两个实体:项目和客户

public class Project
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual Customer Customer { get; set; }
}

还有...

public class Customer
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Rate { get; set; }
}

为了显示 - 例如 - 我创建了一个简单的 ViewModel 的客户列表:

public class ProjectListModel
{
    public List<Project> Projects { get; set; }
}

我的 Controller 中的代码是:

public ActionResult ProjectList()
{
    var model = new ProjectListModel()
    {
        Projects = db.Projects.OrderBy(x => x.Customer.Id).ToList<Project>()
    };
    return PartialView("_ProjectList", model);
}

这样我就可以显示项目列表,甚至相应的客户名称。

@Html.DisplayFor(modelItem => item.Name), @Html.DisplayFor(modelItem => item.Customer.Name))

这里开始我的问题;-)

我不确定我是否正确理解了 ViewModel 的概念,因为我正在返回“数据库对象”的列表。你会怎么做?我可以想象一个新类(class):

public class SingleProjectForViewModel
{
  public string ProjectName {get;set;}
  public string CustomerName { get;set;}
}

并将我的 ViewModel 更改为:

public class ProjectListModel
{
  public List<SingleProjectForViewModel> {get;set;}
}

...但是我的 Controller 中的代码会变得非常长,只是为了填充 ViewModel(从数据库获取,创建 SingleProjectForViewModel 实例并将该实例添加到实例化列表中) - 对于这个示例来说,这没问题,但是使用更大的数据类和更复杂的 View ...!?

我还阅读了有关 Auto-Mapper 的内容,但我不确定使用此工具解决此类“问题”是否“正确”。

非常感谢您阅读本文 - 以及更多的回答或建议! :-)

最佳答案

您正确理解了 View 模型。它们的目的是消除 View 层与数据层的任何耦合。

您可以/应该将数据访问代码分解为辅助类和方法,以消除 Controller 的复杂性。这些方法将查询数据层并返回 View 模型。

我没有使用过自动映射器,但它听起来绝对可以在这里提供帮助。

关于asp.net-mvc - MVC 3 代码优先 ViewModel - 如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10507592/

相关文章:

c# - MVC 3 表单发布和持久化模型数据

c# - 为什么我得到 'One or more types required to compile a dynamic expression cannot be found.' ?

c# - 实体类型 ApplicationUser 不是当前上下文模型的一部分

c# - ASP.NET MVC 中的模型最佳实践

c# - 在运行时从库确定 .Net Framework

c#-4.0 - Fluent nHibernate : No row with the given identifier exists. 2个用户删除某些项目时发生错误

c#-4.0 - 无法通过代码 C# 获取 X509Certificate2 证书

android - 每次如何在koin中创建viewModel的新实例

wpf - MVVM 中 View 模型的交互

c# - MVC Bootstrap typeahead HtmlHelper