我目前正在使用 ASP .NET MVC 3 和 - 对于数据访问 - 实体框架的代码优先方法。
我已经阅读了很多文档、博客、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; }
}
我的控制器中的代码是:
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 的概念。你会怎么做?我可以想象一个新课程:
public class SingleProjectForViewModel
{
public string ProjectName {get;set;}
public string CustomerName { get;set;}
}
并将我的 ViewModel 更改为:
public class ProjectListModel
{
public List<SingleProjectForViewModel> {get;set;}
}
...但是我的控制器中的代码会变得很长,只是为了填充 ViewModel(从 DB 中获取,创建 SingleProjectForViewModel 的实例并将这个实例添加到实例化的列表中)——对于这个例子来说,这可以,但是有更大的数据类还有更复杂的视图...!?
我还阅读了有关 Auto-Mapper 的信息,但我不确定使用此工具解决此类“问题”是否“正确”。
非常感谢您阅读本文 - 以及更多的回答或任何建议!:-)