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

时间:2012-07-02 22:45:30

标签: asp.net-mvc-3 entity-framework

不确定如何解释这一点,但是这里......

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

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

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

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

感谢您的帮助, 麦

1 个答案:

答案 0 :(得分: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.
     }
}

现在想象一下,在一个视图中我们只需要编辑地址和电话。轻量级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; }
     }
}

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

namesapce PresentationModels
{
     public PersonCars
     {
         public int ID { get; set;}
         public string FullName { get; set;}
         public IEnumerable<PMCar> Cars { get; set;}
     }
}

DO和PM之间的映射是这个难题的黄金片段。请务必查看AutoMapper