如何填写视图模型EF 4.1

时间:2012-02-18 14:27:13

标签: asp.net-mvc-3 entity-framework entity-framework-4.1

我正在开发asp.net MVC 3项目。我使用EF 4.1代码第一种方法。我有一个叫做争议的实体类。它映射到数据库名称tblDisptes中的表。它有三个属性名称Lastviewedby,Lastupdatedby,LastRespondedBy ...所有三个整数。我已经创建了一个viewmodel'objoteviewmodel',其中还有三个属性Lastviewedbyname,Lastupdatedbyname,LastRespondedByname和一个名为dispute的属性。现在我的存储库函数返回争议列表。如何将此列表转换为Rapportviewmodel列表,以便这三个属性填充名称?

请建议。

2 个答案:

答案 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
}

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