2012-12-13 160 views
0

我正在開發一個網站與MVC 3和實體框架4.1。我是新來的MVC 3與實體框架開發,所以希望在一些設計決策的一些幫助。我的網站只有大約15頁,用戶可以去。而不是每個頁面都有控制器 - 我將只有一個控制器類 - (但每個頁面都有模型)。而在控制器類中,我將保留區域中每個頁面的方法,以便它們很容易擴展。因此,例如我將在具有RedirectToAction Homepage的SiteController中擁有一個LogOn方法,並且Hompage()方法將位於HomePage區域的我的SiteController中。ASP.NET MVC 3與實體框架設計

我已經有一個數據庫從一個同事設計的(DB中有大約12個表) - 我一直在研究實體框架將如何從該創建代碼 - 但是會建議保持此代碼一個DAL文件夾,每個頁面仍然有我自己的模型?所以例如 - 我有一個FileName將被保存在數據庫中。在我的主頁上,我想顯示FileName - 在我的Homepage模型上有一個字符串FileName,然後在HomePage()視圖方法中,model.FileName是從db.context(從db獲取文件名)設置的。

那麼最好是在我的SiteController的instanstiation點處創建所有的數據庫上下文,或者只是在需要它們的方法中實例化它們?即 - 如果主頁視圖需要表1和表2,然後在Hompage()方法中新建它們,並且如果另一個視圖方法需要數據或必須將數據保存到表3/4,那麼在該方法開始時新建它們?

回答

1
  1. 使用EF Power工具對您的數據庫進行逆向工程,這將創建文件夾結構。
  2. 每頁保留一個控制器。除非這些頁面是真正屬於同一過程的嚮導類型數據輸入場景的一部分,否則將它們分離爲多個控制器。
  3. 右鍵單擊添加新控制器 - 使用內置腳手架使用實體框架上下文生成控制器(確保在上面的第1步之後構建應用程序,在「添加控制器」對話框中選擇您的上下文類)。它會爲你生成視圖和控制器。爲每個您想要輸入數據的項目重複此操作。
  4. 您的上下文將作爲已經爲您創建的控制器的一部分實例化 - 您不需要執行其他任何操作(包括處置 - 生成的代碼也會爲您處理,因爲控制器已處理)
+0

亞當 - 感謝您的意見 - 我已經與一個控制器,因爲我的網站,因爲你已經拿起是嚮導類型的數據輸入 - 即 - 你去的網站上的每個頁面是相互關聯的。在說,從菜單用戶可以選擇報告和管理員 - 我想我會爲他們創建單獨的控制器。 –

+0

我也決定爲每個頁面設置一個模型 - 因爲我的頁面可以顯示來自多個數據庫表格的數據。所以例如 - 在一個頁面上,我需要顯示來自文件詳細信息數據庫表的數據,來自聯繫人數據庫表和公司數據庫表。因此,我在我的模型上創建它們,然後我可以執行Linq查詢並返回我需要的視圖。 –

+0

我總是推薦ViewModels,所以你很好。 –

1

首先觀察時寫道:

而不是爲每個頁面控制器 - 我只打算有 一個控制器類

我完全不同意這一點。由於多種原因。

谷歌利爾有關下列主題:

  • SRP(單一職責原則)又名SOC(的 關注點分離)
  • IOC(控制反轉)
  • 現貨(真理的單點)
  • LSP(里氏替換原則)
  • OCP - 開閉原理