我正在开发asp.net MVC 3项目。我使用EF 4.1代码第一种方法。我有一个叫做争议的实体类。它映射到数据库名称tblDisptes中的表。它有三个属性名称Lastviewedby,Lastupdatedby,LastRespondedBy ...所有三个整数。我已经创建了一个viewmodel'objoteviewmodel',其中还有三个属性Lastviewedbyname,Lastupdatedbyname,LastRespondedByname和一个名为dispute的属性。现在我的存储库函数返回争议列表。如何将此列表转换为Rapportviewmodel列表,以便这三个属性填充名称?
请建议。
答案 0 :(得分:0)
您的视图模型实际上不需要名为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);
}
答案 1 :(得分:0)
为什么你的争议看起来不像?
class Dispute
{
public User LastViewedBy;
public User Lastupdatedbyname
public User LastRespondedByname
}
它应该是这样的。然后问题解决了。当您查询争议时,您已经准备好用户(有用户名)。