EntityFramework5.0 數據遷移筆記--解決模型變化重建數據庫的問題


       用了Codefirst后最大的困擾就是數據變化引起數據庫的刪除再新建,這樣會造成數據丟失,musicstore中介紹的播種辦法也只能滿足下測試的需要。在EntityFrameWork5.0中引入了數據遷移功能能很好的解決這個問題。

       步驟一:

需要EF5.0,最好用NuGet來安裝。工具-->庫程序包管理器-->程序包管理控制台(我用的VS2012)

 

   輸入命令,安裝最新的ef。如下

  

  輸入get-help NuGet 可以查看其它的命令

主題
    about_NuGet
    
簡短描述
提供有關 NuGet 程序包管理器命令的信息。
           
詳細描述
本主題介紹 NuGet 程序包管理器命令。NuGet 是集成的程序包
管理工具,用於將庫和工具添加到 .NET 項目。

                 
包括了以下 NuGet cmdlets。

Cmdlet                    描述
        ------------------        ----------------------------------------------
Get-Package                獲取程序包源中可用的程序包集。

Install-Package                在項目中安裝程序包及其依賴項。

Uninstall-Package            卸載程序包。如果其他程序包依賴於此程序包,
                    則該命令將會失敗,除非指定了 -Force 選項。

Update-Package                將程序包及其依賴項更新為較新版本。

Add-BindingRedirect            檢查項目輸出路徑中的所有程序集,
                    並根據需要將綁定重定向添加到
                    應用程序(或 Web)配置文件。
                            
Get-Project                為指定的項目返回對 DTE (Development Tools Environment) 
                    的引用。如果未指定任何項目,則返回
                    程序包管理器控制台中選擇的默認項目。

Open-PackagePage        打開瀏覽器,並指向指定的程序包的 ProjectUrl, LicenseUrl 或
ReportAbuseUrl。

        Register-TabExpansion    為命令的參數注冊選項卡擴展。

另請參閱
聯機文檔: http://go.microsoft.com/fwlink/?LinkID=206619
    Get-Package
    Install-Package
    Uninstall-Package
    Update-Package
    Add-BindingRedirect
    Get-Project
    Open-PackagePage
    Register-TabExpansion
View Code

 步驟二:

 允許數據遷移,繼續輸入命令:PM> enable-migrations   會自動生成migration配置文件類,在構造函數中加入黃色mark的部分,允許自動遷移。比如你Model里面修改了字段類型,長度,或者增加了字段。它來自動修改數據庫。但這還沒有結束

namespace NoteSystem.Migrations
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Migrations;
    using System.Linq;

    internal sealed class Configuration<TContext> : DbMigrationsConfiguration<TContext> where TContext:DbContext
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = true;
            AutomaticMigrationDataLossAllowed = true;
        }

       
    }
}

 步驟三:修改數據庫的構造函數,我的數據庫這里是NoteDb ,灰色部分我們之前用的方式,很不好,黃色部分就是支持數據遷移初始化。

  public NoteDb()
            : base(DbNameOrDbConnectionstring)
        {
            Database.SetInitializer(new MigrateDatabaseToLatestVersion<NoteDb, Configuration<NoteDb>>());
//Database.SetInitializer(new DropCreateDatabaseIfModelChanges<NoteDb>()); }

 總結:這個migration還是省了不少事情,但也不是那么的完全智能,最好不要手動去刪除數據庫中的表,通過dbset來刪除,因為數據庫所有的操作記錄是記錄在數據庫中,在系統表的MigrationHistory 中。 你的手動記錄是沒有存在這里面的。

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM