EF 第三篇 生產環境下的數據遷移

 

前言

本文所謂數據遷移,直白點不如說成數據庫升級。雖然大部分帶服務器型的應用,所有客戶端都是連到同一臺服務器上,對這樣的生產環境,數據庫升級起來不是什麼難事,用vs自帶的Migration也好,執行sql腳本也好,都比較容易。然而在每家客戶現場都要部署一臺服務器的應用也不少,如果一家家手工地去升級數據庫,那將是一個可怕的工作量。那麼對於這樣的環境要怎麼做到自動升級數據庫呢?相信大家也在網上搜了不少了EF關於生產環境下的數據遷移方案,然後99%搜到的都是使用vs自帶的Migration命令方式遷移,我也不知道爲什麼沒人分享生產環境下的數據遷移,這明明是很重要的一個環節。

 

步驟

1、創建實體

using System.ComponentModel.DataAnnotations.Schema;

namespace Migration
{
    public class User
    {
        [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Guid Id { get; set; }
      //  public string Name { get; set; }
        public string NickName { get; set; }
       public int Sex { get; set; }
    }
}

 2、創建DbContext

using System.Data.Entity;
namespace Migration
{
    [DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
    public class DbBase : DbContext
    {
        public DbBase() : base("dbConnect") {
           
        }
        public DbSet<User> Users { get; set; }
    }
}

 3、打開程序包管理控制檯,輸入PM> enable-migrations,vs自動生成了Configuration類

注意,生成的Configuration構造函數中AutomaticMigrationsEnabled值是false, 我們把它改成true,啓用自動遷移。然後根據自已的需要設置數據庫升級時是否允許數據丟失,建議還在開發階段設AutomaticMigrationDataLossAllowed = true;直第一個生產環境發佈了,將其改爲AutomaticMigrationDataLossAllowed = false;以免造成客戶重要數據丟失。這裏的數據丟失指的是,例如:User表中,第一個版本有個Name字段,並且已經有數據錄入了,然後第二個版本將Name字段刪除了,此時若AutomaticMigrationDataLossAllowed = false則會出拋出異常,無法遷移。

3、修改DbContext

using System.Data.Entity;

namespace Migration
{

    [DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
    public class DbBase : DbContext
    {
        public DbBase() : base("dbConnect") {
            //自動遷移
            Database.SetInitializer(new MigrateDatabaseToLatestVersion<DbBase, Migration.Migrations.Configuration>());
        }
        public DbSet<User> Users { get; set; }
       
       
    }
}

 簡單的三個步驟就完成了生產環境的自動遷移,不知道爲什麼找不到這個的文章。接下來只想辦法把客戶現場的程序集替換便能自動升級數據了。

EF 第三篇 生產環境下的數據遷移

標籤:

原文地址:http://www.cnblogs.com/uucode/p/5850140.html

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章