不知道如何解释这一点,但这里......
我已经使用 EF 4.3 构建了代码优先数据模型。类之一,“地址”包含典型的地址数据,街道,城市,州等。模型中的其他类包含“地址”类的实例。
问题。数据将使用不同的视图收集/呈现,其中一些需要地址字段,另一些则不需要。
我可以构建不同的视图模型,每个模型都具有必要的验证属性,并在数据模型和视图模型之间来回复制数据,但这似乎是错误的。
我错过了什么?必须有一个更聪明的方法来做到这一点。
谢谢你的帮助,吉米
不知道如何解释这一点,但这里......
我已经使用 EF 4.3 构建了代码优先数据模型。类之一,“地址”包含典型的地址数据,街道,城市,州等。模型中的其他类包含“地址”类的实例。
问题。数据将使用不同的视图收集/呈现,其中一些需要地址字段,另一些则不需要。
我可以构建不同的视图模型,每个模型都具有必要的验证属性,并在数据模型和视图模型之间来回复制数据,但这似乎是错误的。
我错过了什么?必须有一个更聪明的方法来做到这一点。
谢谢你的帮助,吉米
首先阅读这些问题及其答案:
这篇文章也可以帮助:
总之,我认为在大多数情况下,拥有一个胖乎乎的域模型(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。