2012-05-08 83 views
2

我目前正在使用ASP .NET MVC 3和 - 數據訪問 - 實體框架的代碼第一種方法。MVC 3 Code First ViewModel - 如何?

我讀過很多文檔,博客,stackoverflow問題等,但沒有找到一個精確的答案,以下問題,我希望有人可以幫助我。

我有包含兩個entites的一個簡單的(數據庫)模型:項目和客戶

public class Project 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public virtual Customer Customer { get; set; } 
} 

和...

public class Customer 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public int Rate { get; set; } 
} 

用於顯示 - 例如 - 我有一個客戶列表創建一個簡單的視圖模型:

public class ProjectListModel 
{ 
    public List<Project> Projects { get; set; } 
} 

在我的控制器中的代碼是:

public ActionResult ProjectList() 
{ 
    var model = new ProjectListModel() 
    { 
     Projects = db.Projects.OrderBy(x => x.Customer.Id).ToList<Project>() 
    }; 
    return PartialView("_ProjectList", model); 
} 

所以我可以顯示項目列表甚至相應的客戶名稱。

@Html.DisplayFor(modelItem => item.Name), @Html.DisplayFor(modelItem => item.Customer.Name)) 

在這裏開始我的問題;-)

我不確定如果我理解正確的ViewModels的概念,我就要回我的「數據庫對象」的名單。你會怎麼做?我能想象一個新的類:

public class SingleProjectForViewModel 
{ 
    public string ProjectName {get;set;} 
    public string CustomerName { get;set;} 
} 

和改變我的ViewModel到:

public class ProjectListModel 
{ 
    public List<SingleProjectForViewModel> {get;set;} 
} 

...但後來在我的控制器代碼將變得很長,正好填補視圖模型(從數據庫獲取,創建SingleProjectForViewModel的實例並將此實例添加到實例化的List) - 對於這個例子來說,這將是好的,但具有更大的數據類和更復雜的視圖...!

我也讀過關於自動映射器,但我不確定是否「正確」使用這種工具來處理那種「問題」。

非常感謝您閱讀本文 - 還有更多有關回答或任何建議! :-)

回答

2

您理解正確地查看模型。它們旨在將視圖層從任意耦合到數據層。

您可以/應該將您的數據訪問代碼分解爲助手類和方法,以從您的控制器中刪除複雜性。這些方法將查詢數據層並返回視圖模型。

我還沒有使用automapper,但它聽起來像是什麼東西,肯定可以幫助這裏。

+0

謝謝你的評論。你的大寫ANY幫了很多:) ...所以我會嘗試這種方法,也許automapper。 – Jetro223