0

我有一個用ASP.Net 2.0 Web Form編寫的系統。與MySQL服務器交流的框架非常酷。它讀取服務器表單標籤或面板內的所有控件,並在目標表上執行CRUD操作。EF + SQL Server:代碼優先還是數據庫優先

當我創建CRUD頁面時,我只需要在數據庫用戶{id,name,password,createdate}中創建表,並且我只需要使用id作爲表中的確切列名。這些控件可以是輸入/選擇/選項/ chekbox/textarea,甚至可以是頁面上的FCK編輯器或CK編輯器。該框架遍歷面板內的所有控件並保存/編輯/刪除。如果我想添加一些新的字段,電子郵件和移動設備,我只需要在頁面上添加兩個控件,並在表格中添加兩列。而已。我不必在page.aspx.cs文件,實體層,業務層或數據訪問層中更改任何內容。這是非常容易實施和維護。

我們希望升級系統以使用ASP.Net 4 MVC3與Entity Framework CT5。我們將從頭開始重建整個系統。我希望這裏的一些專家能夠給我一些指點。我發現了以下兩個選項來重建系統。

1. Code First 我們的新系統將完成與上述框架完全相同的操作。它將遍歷所有Request.Forms數據,並將它們與其數據庫中的關聯表映射並保存/更新/刪除所有數據。爲此,view將發佈表單數據,控制器將接受Entity類的值並通過EF將它們保存到數據庫中。我仍然需要創建ViewModel類來在View上顯示數據。如果有添加電子郵件和移動字段到用戶頁面的任何更改,我仍然需要更改三個位置查看,實體(域類)和ViewModel。我不必在數據庫中更改任何內容,因爲EF會自動運行ALTER TABLE以添加兩個新字段。我仍然不知道如何最小化實體和視圖模型類的需求。

2.數據庫首先 我真的不喜歡這種方式,但我會,如果這個解決方案提供了更靈活的操作。我將在數據庫中創建列,系統將動態創建ViewModel(我仍在弄清楚如何執行此操作),讀取表中的所有列,並在頁面上顯示數據。當視圖發佈數據時,它需要動態創建實體類並將更改保存到數據庫。編輯: 升級當前系統的原因。

  • 我們希望使用新功能的動力是.NET 4中的LINQ,實體框架,不顯眼的JavaScript庫,easifer使用JSON數據工作,遠程驗證(我們可以使用RequireFieldValidator,RegExValidator在當前的系統,但他們是有限的,例如:對輸入複選框和選項進行驗證),用var和界面進行鴨子打字。
+0

這聽起來像你甚至沒有你當前的系統中的實體或業務層,只是一個數據訪問層(mysql框架)。你重寫的原因是什麼?只是爲了擺脫視圖狀態?任何其他動機? – danludwig 2012-08-02 11:40:39

+0

這聽起來像你不需要重寫應用程序。首先... – 2012-08-02 12:10:28

+0

這不僅僅是擺脫了ViewState。我們通常使用RequiredFieldValidator,RegularExpressionValidator和page.aspx.cs文件中的一些附加驗證完成所有驗證。我們在當前系統中也不會使用Session或Viewstate。我添加了我們想升級系統的原因。在我們開始確保系統像舊系統一樣易於維護之前,我仍在考慮架構。 – 2012-08-02 12:52:05

回答

0

我們的新系統也將這樣做完全一樣的操作與上述 框架。它將遍歷所有的Request.Forms數據,並將它們映射到數據庫中的關聯表 ,並保存/更新/刪除所有的 數據。爲此,查看將發佈表單數據,控制器將 接受實體類的值並通過EF將它們保存到 數據庫。

如果我在這裏錯過了某些東西,有人請拍我,但這些說法似乎與我矛盾。如果你想要一個能夠自動解析請求的系統。形成數據並將它們直接映射到數據庫表,那麼爲什麼您需要使用Entity Framework(或任何其他類型的中間件)呢? EF或任何ORM的要點是創建一個有意義的代表系統名詞的概念數據對象集合。然後,您對這些名詞進行操作,影響它們的屬性或訪問它們的行爲,並讓ORM找出如何將它們映射到表+列。

要回答你的問題,這聽起來像你想要的最簡單的解決方案,這意味着你必須寫最少量的代碼。如果這是一個正確的假設,那麼您可能首先需要使用數據庫。你可以讓EF生成你的實體類,但就像你說的那樣,你仍然需要手動創建viewmodel類或者想出一些AOP(使用T4也許)來爲你生成這些類。但是,無論何時,如果您給工具提供了爲您生成某種東西的權力,那麼您就無法控制它。

我第一喜歡的代碼首先/ 概念模式,但我也很喜歡(從基礎設施問題可以交給工具和像AutoMapper,EF,T4MVC等框架除外)擁有了一切完全控制應用程序。是的,這是更多的工作,因爲我必須創建實體類,視圖模型類和視圖(以及控制器,動作過濾器和html助手,還有其他)。如果你的域名是你可以直接將文本框映射到數據庫表格&列的域名,那麼這可能對你來說太過分了。

+0

我們有一直在進行更改的客戶。是的,我更喜歡編寫代碼越來越少依賴數據訪問層。除非我們需要驗證,否則添加新字段不需要在page.aspx.cs文件,業務邏輯或數據訪問層中進行更改。我喜歡代碼優先的方式。如果我使用代碼優先,應該有一種方法,我需要在.cshtml文件和域中進行更改。而已。在這種情況下,我仍然需要弄清楚如何避免改變Command類和ViewModel。 – 2012-08-03 13:37:31