如何填充视图模型EF 4.1



我正在从事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
}

这就是它应该有的样子。然后问题解决了。当您查询争议时,您已经准备好了用户(有用户名)。

最新更新