標籤:
今天準備說說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檔案(看著就頭疼,因為不是自己寫的代碼),改完下表又得重新搭建一下Entity Framework(真的很麻煩啊)。但是任何強大的東西都有其一定的弊端,正因為使用如此簡單,所以容易造成資料的丟失,特別是像我這種從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 ,我也是初學者,有問題一起探討,大神請指教。
ABP Migration(資料庫遷移)