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

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值