您的視圖模型並不真的需要一個名爲dispute
屬性。視圖模型不應該引用您的域模型。
至於映射來講一種可能性是做手工,但這種情況可能很快成爲累贅更爲複雜的模型:
public ActionResult Foo()
{
IEnumerable<disputes> disputes = ... fetch from repo
IEnumerable<disputeviewmodel> disputeViewModels = disputes.Select(x => new disputeviewmodel
{
Lastviewedbyname = x.Lastviewedby,
Lastupdatedbyname = x.Lastupdatedby,
LastRespondedByname = x.LastRespondedBy
});
return View(disputeViewModels);
}
因此,一個更好的辦法是使用AutoMapper:
public ActionResult Foo()
{
IEnumerable<disputes> disputes = ... fetch from repo
IEnumerable<disputeviewmodel> disputeViewModels = Mapper.Map<IEnumerable<disputes>, IEnumerable<disputeviewmodel>>(disputes);
return View(disputeViewModels);
}
感謝您的快速反應。如何填寫lastviewedbyname,lastupdatedbyname,lastView_Models的LastRespondedByname?因爲爭議沒有那些。我需要操縱Lastviewedby,Lastupdatedby,爭議的LastRespondedBy和填充視圖模型 – DotnetSparrow 2012-02-18 14:36:35
@DotnetSparrow的Lastviewedbyname,Lastupdatedbyname,LastRespondedByname,在這個時候,你的數據庫訪問層應該擔心。連接應該在那裏執行。您的存儲庫應該已經返回一個包含所有必要信息的域模型。這就是爲什麼總是根據聚合根來定義存儲庫的好主意。 – 2012-02-18 14:37:12
如果我使用AutoMapper,然後Lastviewedbyname,Lastupdatedbyname,視圖模型的LastRespondedByname將是空的?因爲爭議沒有這些屬性。 – DotnetSparrow 2012-02-18 14:58:27