天天看點

Asp.Net EF6+Mysql上的資料庫遷移.

近期需要做一個.Net+Mysql的項目,其中在設計開發時,資料庫的時候都是一步一步的建表,因為大部分業務細節并沒有确定下來,所有表不是統一建立好的。那麼使用EF的話就需要用到資料庫遷移。感覺操作内容以後回記不住,還是寫份部落格記錄一下。

其中EF+Mysql必須保持Mysql與項目的DLL版本相同,這部分網絡有很多很好的文章,這裡就不細說了。

下面是正确的上下文。

其中[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]是必要的。

[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
    public  class BsContext : DbContext, Data.BsContext.IBsContext
    {

        public BsContext() : base("name=BMi-StringCon")
        {
            this.Configuration.LazyLoadingEnabled = false;

        }
        #region Tabel
        public virtual DbSet<BMi_FW_Exp.Data.Map.User.User> User { set; get; }
        public virtual DbSet<BMi_FW_Exp.Data.Map.Order.Order> Order { set; get; }
        public virtual DbSet<BMi_FW_Exp.Data.Map.Credit.Credit> Credit { set; get; }
        #endregion
    }
           

之後就可以開啟遷移了。

打開“程式包管理控制台”,使用指令:

Enable-Migrations -Force
           

若上下文不是在啟動項目,而是在一個類庫中的話,會提示在“程式集“項目名”中找不到上下文類型。”

這種情況下可以使用下面的指令:

Enable-Migrations -ProjectName 庫名 -Force
           

此時若提示:Code First Migrations enabled for project 庫名.那麼遷移就已經建立好了,此時對應的地方(類庫)會多出一個檔案夾。

Asp.Net EF6+Mysql上的資料庫遷移.

打開Configguration.cs,将AutomaticMigrationsEnabled改為true。

兩個檔案的說明在網上有很多詳細的文章,這也不細說了。

接下來就開始更新資料庫

在控制台中運作指令:

update-database -verbose -force
           

對應類庫的指令:

update-database -ProjectName 庫名 -verbose -force
           

顯示Running Seed method.即資料庫遷移成功,可以打開資料庫檢視資料庫的架構是否發生了改變。

關于報錯:

MySql.Data.MySqlClient.MySqlException (0x80004005): Invalid use of NULL value
           

這個錯誤是,在update資料庫的時候,忽略了資料為空的情況,比如某字段在資料庫中為Null,我們使用遷移改為 Not Null,那就會報這個錯誤,因為資料沒有預設值,并且不能為Null,那麼遷移就會報錯。

目前我遇到在Asp.Net EF + Mysql資料庫遷移上的問題就這麼多,以後發現再補全其他解決方法。

文章若有不對的地方希望大神們能指出,小弟将盡快學習與修正,并希望該文章能對各位有所幫助。