我正在从事asp.net MVC 3项目。我使用EF 4.1代码优先的方法。我有一个实体类,叫做纠纷。它映射到数据库名称为tblDisptes的表。它有三个属性名称Lastviewedby、Lastupdatedby、LastResponedBy。。。所有三个整数。我创建了一个视图模型"disputeviewmodel",其中又包含三个属性Lastviewedbyname、Lastupdatedbyname、LastResponedbyname和一个名为dispute的属性。现在,我的存储库函数返回争议列表。如何将这个列表转换为争议视图模型的列表,以便用名称填充这三个属性?
请提出建议。
视图模型实际上并不需要名为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);
}
为什么你的争议看起来不是那样的?
class Dispute
{
public User LastViewedBy;
public User Lastupdatedbyname
public User LastRespondedByname
}
这就是它应该有的样子。然后问题解决了。当您查询争议时,您已经准备好了用户(有用户名)。