(此文章同時發表在本人微信公眾號“dotNET每日精華文章”,歡迎右邊二維碼來關注。)
題記:雖然EF7重新設計了Entity Framework,不過也還是能夠支持數據遷移的。
Entity Framework 7是微軟ORM框架的一次重生,變得更加輕量級。因而默認情況是沒有開啟數據遷移(Migration)功能的,也即創建出來的數據庫默認不會包含“__MigrationHistory”表。在這種情況下,數據模型的變更,需要你手動(通過SQL腳本)去修改對應的數據庫結構。當然,你還是可以啟用自動的數據遷移功能的。
Mostafa Asaduzzaman在CodeProject上分享了一篇文章,圖文並茂的講解了如何在Entity Framework 7中進行數據遷移。大致步驟如下:
1,在project.json中引用EntityFramework.Commands包
1: "EntityFramework.Commands": "7.0.0-beta4"
2,在project.json中添加“ef”的命令:
1: "commands": {
2: "ef": "EntityFramework.Commands"
3: },
3,變更數據模型之后,在項目文件夾中執行如下命令來添加新的遷移代碼:
1: dnx . ef migration add newBook
4,運行遷移代碼:
1: dnx . ef migration apply
更詳細的內容,可以“閱讀原文”。就我自己的實踐經驗而言,有幾點可以分享給大家:
- 現在Migration的命令不是EF6之前那樣在Package Manager Console中運行了,而是在dnx命令下運行
- 如果dnx命令無效,那么可能是沒有執行“dnvm use”
- 如果之前沒有啟用Migration,最好打算開始遷移之前執行一次“dnx . ef migration add InitialCreate”來添加一個類似之前的初始遷移
- 如何不想通過命令來應用遷移或者說想在代碼中自動應用遷移,那么可以創建如下這樣的方法,在Startup中的Configure方法中調用
1: public static void Init(IServiceProvider serviceProvider)
2: {
3: using (var db = serviceProvider.GetService<LibraryDbContext>())
4: {
5: var sqlDb = db.Database as SqlServerDatabase;
6: if (sqlDb != null)
7: {
8: try
9: {
10: sqlDb.ApplyMigrations();
11: }
12: catch (Exception ex)
13: {
14: Trace.TraceError(ex.Message);
15: throw;
16: }
17: }
18: }
19: }
原文鏈接:http://www.codeproject.com/Tips/988763/Database-Migration-in-Entity-Framework