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

前言sql

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

 

步驟服務器

一、建立實體函數

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; }
    }
}

 二、建立DbContextui

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; }
    }
}

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

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

三、修改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; }
       
       
    }
}

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

相關文章
相關標籤/搜索