7

不知道如何解释这一点,但这里......

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

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

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

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

谢谢你的帮助,吉米

4

1 回答 1

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

于 2012-07-03T01:14:27.763 回答