您的视图模型并不真的需要一个名为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