MVC3视图模型与实体框架模型

JCo*_*ell 7 entity-framework asp.net-mvc-3

不知道怎么解释这个,但是这里......

我使用EF 4.3构建了代码优先数据模型.其中一个类"地址"包含典型的地址数据,街道,城市,州等.模型中的其他类包含"地址"类的实例.

问题.将使用不同的视图收集/呈现数据,其中一些将需要地址字段,而另一些则不需要.

我可以构建不同的视图模型,每个模型都具有必要的验证属性,并在数据模型和视图模型之间来回复制数据,但这似乎是错误的.

我错过了什么?必须有一种更聪明的方法来做到这一点.

谢谢你的帮助,吉米

Toh*_*hid 6

首先阅读这些问题及其答案:

这篇文章也可以帮助:

总之,我认为在大多数情况下,拥有一个胖乎乎的域模型(DM),但与之相关的轻量级表示模型(PM)是有帮助的.因此,当我们只想编辑那个胖DM的一小部分时,我们的一个PM将会举手.

想象一下DM中的这个类:

namespace DomainModels
{
    public class Person
    {
         public int ID { get; set; }
         public string FirstName { get; set; }
         public string MiddleName { get; set; }
         public string LastName { get; set; }
         public DateTime? DoB { get; set; }
         public MyAddressDM Address { get; set; }
         public string Phone { get; set; }
         public IEnumerable<MyCarModel> Cars { get; set; }
         //etc.
     }
}
Run Code Online (Sandbox Code Playgroud)

现在想象一下,在一个视图中我们只需要编辑地址和电话.轻量级PM可能像:

namesapce PresentationModels
{
     public PersonAddressPhone
     {
         public int ID { get; set;}
         public string FullName { get; set;}
         public string AddressSteet { get; set; }
         public string AddressCity { get; set; }
         public string AddressState { get; set; }
         public string AddressZipCode { get; set; }
         public string Phone { get; set; }
     }
}
Run Code Online (Sandbox Code Playgroud)

在另一个视图中,我们需要为一个人添加/删除汽车:

namesapce PresentationModels
{
     public PersonCars
     {
         public int ID { get; set;}
         public string FullName { get; set;}
         public IEnumerable<PMCar> Cars { get; set;}
     }
}
Run Code Online (Sandbox Code Playgroud)

DO和PM之间的映射是这个难题的黄金片段.一定要看看AutoMapper.