Entity Framework裡面 使用Code First 還是 Model First / Database First?

背景:

之前我們小組在一個項目中使用了Code First, 但是在使用Fluent API描述各種Class/Table之間的關係的時候花費了比較大的Cost。 今天要開始一個新的Project了,他們表示必須不要用Code First... 直接從建立Database開始,然後用EF導入Model/SPROC 什麼的。我個人覺得這樣需要寫許多多餘的ViewModel才能做到Model Validation, 比如說簡單的CRUD操作。 我也嘗試過直接使用MetadataType的屬性來額外綁定一些Validation的信息, 比如asp.net mvc 4 這樣。

問題來了,大家在Model building, Model Update方面有沒有使用Code First比較好的經驗? 如果是Model First 如何做Model Validation?還有把大部分Logic寫道 SPROC是不是一個好的solution?


還是推薦code first,雖然EF Team沒明說,但是從各種文檔可以推斷出來,他們本身是推薦使用code first的。

從我個人來說,我更習慣使用class代碼來定義和表達各個實體的關係。另外code first也更容易做版本管理。

下一版本的EF7將code first放到了更重要的位置,model first可以說是名存實亡。總體來說,code first是趨勢。


堅決用CodeFirst,因為如果你表裡有數據,每次想通過modelFirst去更新表結構你就哭吧,血淚教訓。


我個人更喜歡code first 因為我覺得class定義的代碼和關係是很清晰易懂的


code first, model first, database first更確切的說應該是根據應用場景分的,比如如果在原有資料庫上開發,那就直接dabase first,如果是一個新項目,完全可以code first。但不管用哪種,其中的model都隸屬於domain model範疇,如果要在層間傳遞,要用到dto,所以更多的關注點應該放到dto和domain model的轉換上。


當我聽到code first這種方式時,我都驚訝了。。

居然有這種神奇的方式,實在是……

一次見,首先不建資料庫模型,而是先寫class生成資料庫的。。


給題主推薦一個工具:

Entity Framework Power Tools

直接由資料庫生成codefirst代碼


code first 本來就可以從資料庫里直接生成code的,在VS2015里試下就知道了。


modelfirst有缺陷 更新表會導致數據丟失是眾人皆知的,而且modelfirst不能設計所有的資料庫關係,比如說在modelfirst中建立關係,不同的關係類型可能生成的關係資料庫一模一樣;還有從資料庫生成model,不同的資料庫關係也可能生成一樣的model;關係資料庫應是久經驗證的東西,所以唯一的可能是model edmx存在問題,這套設計系統貌似和sql關係圖相似,但是有有很多區別,搞了很多自己的概念。附註:我所說的一樣不是指看看edmx關係圖而已 而是指進行文件的二進位比較


必須用 Code First 只有這樣才能真正的拋棄資料庫的概念 完全實現面向對象開發

添加一條數據直接調用Add方法,傳一個實體過去

還有就是能更好的描述實體與實體之間的關係


毫無疑問 新項目用Code First


Code First 吧。之前試用了7的預覽版里,也只能使用Code First 了。


還是用code first 吧,model first生成的edmx文件好大。。。。


推薦閱讀:

如何在C#中存儲大量數據而不引發OutOfMemoryException?
為什麼聽說過 JVM 調優,卻沒聽說過 CLR 調優?
WebApi和MVC有什麼區別?
ASP.NET開源以後會有更多的網站選擇這個平台么?
ADO.NET的SqlParameter(String,?Object)的構造函數第二個參數不能為0?

TAG:資料庫 | NET | C# | ASPNETMVC | EntityFramework |