我目前正在使用 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/