今天准備說說EntityFramework 6.0+,它與我之前所學的4.0有所區別,自從4.1發布以來,code first 被許多人所鍾愛,Dbcontext API也由此時而生。早在學校的
時候就聽老師說過Db first,Model first 和 Code first ,沒怎么去注意,最近我直接從Db first 跳到了 Code first,去了解了下,個人覺得Model first 和 Code first 沒多
大區別,英文好的人看以看看http://stackoverflow.com/questions/5446316/code-first-vs-model-database-first,在這里我也稍微解釋下,code first 最大優點就是
代碼干凈簡潔,可以使用代碼完全控制數據庫相關的操作,而不需要到管理系統里面建庫建表,也沒有那些EntityFramework 4.0里面的那些自動生成的XML文件(看着就頭
疼,因為不是自己寫的代碼),改完下表又得重新搭建一下實體框架(真的很麻煩啊)。但是任何強大的東西都有其一定的弊端,正因為使用如此簡單,所以容易造成數據的丟
失,特別是像我這種從Db frist 直接跳到 code first 的人如果沒有特別了解,就去跟那些已經使用EF6的人一起做事。這些不是重點,重點是Migration(數據庫遷移),
數據庫遷移對於企業級應用程序來說是再正常不過了吧。拿我們Abp的例子來說吧,首先到ABP官網下載項目https://github.com/aspnetboilerplate,雙擊那個NuGet包管
理.exe,使用VS2012+打開項目, 在VS工具欄里找到工具==》Nuget程序包管理器==》程序包管理器控制台,先注意看控制台上面的默認項目是不是EntityFramework層,
如果不是則選擇它,
,改成下面這樣
在控制台里面輸入:Install-Package EntityFramework 命令,
這樣最新版的EF就安裝到了你的EntityFramework層,是不是很簡單,然后建表,先改下你的配置文件
當然不改的話也是可以的,但是不安全,例子給的是信任連接,也就是說不需要用戶名和密碼就可以進到你的數據庫,然后又到了輸入命令的時候了,
,如果確定命令沒有輸入錯誤,找3個點:1.默認項目是不是EntityFramework,2.啟動項目是不是UI層,3.如果前面兩個都沒問題,那么請關掉VS,重新打開項目,
讓VS重新加載下項目,不要問我為什么,我也不知道(大神告訴我的),只能自己去猜測。注意看我用紅線畫出來的東西,等下告訴你為什么 ,這樣表就建好了,
,那個People表是根據我們例子里面的Person類生成的,
看到那個Table特性,就知道為什么生成的表名是People了,凡是加上Table特性的實體類,在運行Update-database命令的時候就會生成對應的表,它的實現原理是反射,
至於剛才那個seed方法是什么意思呢,
打開那個Migration文件夾,看到里面的Configuration.cs , 左邊那個Seed方法,每次更新數據庫最后都會執行這個方法,可以在這里寫代碼增加記錄等等,最后要說說那個Migration了,
首先看到上面那個Configuration.cs里面的Configuration方法里面有個AutomaticMigrationEnable屬性,此時它是false,也就是說此時是不允許自動遷移的,當然這個Migration文件
夾是之前就加上去的,我們先把它刪除掉,
,沒有了,運行命令Add Migration InitialCreate
,
看到沒有,報錯了,錯誤消息是沒有找到遷移配置,這時候我們需要先啟動遷移,執行命令:Enable-Migrations
,
Migration文件夾又神奇的出現了,再運行:Add-Migration InitialCreate命令,注意那個InitialCreate,
看到右邊那個Migration文件夾里多了一個2015...InitialCreate,看到這里懂了吧,然后我貼一段我從網上找到的圖
,
這個命令我還沒用過,不過應該沒什么問題。演示用的項目到Github里面去下載,地址:https://github.com/aspnetboilerplate ,我也是初學者,有問題一起探討,大神請指教。