2012-02-18 64 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