2012-02-18 65 views
-1

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

请建议。

回答

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); 
} 
+0

感谢您的快速反应。如何填写lastviewedbyname,lastupdatedbyname,lastView_Models的LastRespondedByname?因为争议没有那些。我需要操纵Lastviewedby,Lastupdatedby,争议的LastRespondedBy和填充视图模型 – DotnetSparrow 2012-02-18 14:36:35

+0

@DotnetSparrow的Lastviewedbyname,Lastupdatedbyname,LastRespondedByname,在这个时候,你的数据库访问层应该担心。连接应该在那里执行。您的存储库应该已经返回一个包含所有必要信息的域模型。这就是为什么总是根据聚合根来定义存储库的好主意。 – 2012-02-18 14:37:12

+0

如果我使用AutoMapper,然后Lastviewedbyname,Lastupdatedbyname,视图模型的LastRespondedByname将是空的?因为争议没有这些属性。 – DotnetSparrow 2012-02-18 14:58:27

0

为什么你的纠纷看起来不像是什么?

class Dispute 
{ 
    public User LastViewedBy; 
    public User Lastupdatedbyname 
    public User LastRespondedByname 
} 

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

+0

争议表没有名称。它拥有Id。在视图模型中,我有条件地需要名称。就像如果dispute.usertype = 1 then lastViewedBy = PersonName else lastViewedBy = BusinessName – DotnetSparrow 2012-02-18 14:56:34

+0

那么你首先使用代码。所以数据库是基于你的POCO实体生成的。如果您在我的示例中创建了争议,那么表格中也将包含ID,但是当您查询争议时,它将为您进行连接。我不明白你从哪里获得PersonName,BusinessName。 – 2012-02-18 15:04:15