不确定如何解释这一点,但是这里......
我使用EF 4.3构建了代码优先数据模型。其中一个类,“地址”包含典型的地址数据,街道,城市,州等。模型中的其他类包含“地址”类的实例。
问题所在。将使用不同的视图收集/呈现数据,其中一些将需要地址字段,而另一些则不需要。
我可以构建不同的视图模型,每个模型都具有必要的验证属性,并在数据模型和视图模型之间来回复制数据,但这似乎是错误的。
我错过了什么?必须有一种更聪明的方法来做到这一点。
感谢您的帮助, 麦
答案 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。