2015-06-27 41 views
1

第一篇文章在這裏。我對編程非常陌生,並且我是MVC和實體框架的新成員。我有一個問題,涉及到很多細節和我試過的很多代碼,但在我把所有這些都放下之前,我想我會問一個問題,看看我是否從右邊接近問題範例。將多個表格組合成自定義視圖模型

我工作的一個項目,其中我的團隊與一個MVC的Web應用程序替代基於接入的桌面應用程序。我們有一個與多個其他表有一對多關係的父表,並且我們已經將該模式作爲mdf文件引入到我們的項目中,並且迄今爲止都試圖首先執行這個數據庫。主表的

的主鍵,也就是說,客戶ID。所有的子表都有CustomerID作爲外鍵。該應用程序需要做的是顯示來自所有不同表格中的選定單元格的數據。

我試圖攻擊這個的方式是我創建了一個模型類,其中只包含需要顯示的列,然後在控制器中查詢數據庫的CustomerID上的一系列左外連接,選擇我想要的列,然後填充我在select子句中創建的自定義模型的單個實例。然後我將該模型傳遞給View。

基本的問題,我知道,但就是一般的過程,是最好的?或者我需要以不同的方式思考這個問題?

+0

這聽起來似乎是合理的顯示視圖。對於創建或更新視圖,您將需要包含子集合的不同模型。如果您使用EF,則不需要連接 - 您可以使用包含語法熱切地獲取所需內容:_context.Customers.Include(c => c.Invoices).Include(c => c.Addresses)等等可以使用像Automapper這樣的工具將實體數據移動到模型中。 –

+0

謝謝@Steve!我很欣賞這個快速評論。包括看起來會有幫助,並感謝關於創建和查看不同模型的頭像。 –

+0

雖然它不是一般的最佳實踐,但您可以將實體類與所有「Include」直接傳遞給您的視圖。對於CRUD應用程序來說,它將工作得很好 – ranquild

回答

0

我不知道這是否是去了解它的最佳方式,但我結束了創建由每個我需要借鑑的數據表的表的典範。

所以 public class MasterModel { public List Names {get;組; } public List Emails {get;組; } public List Phones {get;組; }}

然後

public ActionResult Index(int id) 
{ 
    MasterModel masterModel = new MasterModel(); 
    masterModel.Names = *query NamesTable where Names.id == id* 
    masterModel.Emails = *query EmailsTable where Emails.id == id* 
    masterModel.Phones = *query PhonesTable where Phones.id == id* 

    return View(masterModel) 
} 

使傳遞到masterModel index.cshtml,和index.cshtml拉起爲_NamesPartial.cshtml,_EmailsPartial.cshtml和_Phones.cshtml的局部視圖。這些每一個泛音具有類型的IList的一個模型等

所以後來那些每個泛音有一個像

foreach (var item in Model) 
{ 
    @Html.TextBox("FirstProp", item.FirstProp) 
    @Html.TextBox("SecondProp", item.SecondProp) 
} 

代碼,並且得到一個頁面上顯示我的數據。

這樣的問題是「解決」。

但它確實讓我如何使用這個同樣的方法/模型寫信給各只使用一個控制器和模型的許多數據庫的新問題。

相關問題