CodeFirst数据迁移

1.DBContext的代码如下:

 1 public class Context:DbContext
 2     {
 3         public Context()
 4             : base("name=ConnStr")
 5         {
 6            
 7         }
 8 
 9         public DbSet<Menu> Menus { get; set; }
10     }

2.Menu类如下:

 1 [Table("Menu")]
 2     public class Menu
 3     {
 4         [Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]
 5         public int ID { get; set; }
 6         [Required]
 7         public int PID { get; set; }
 8         [Required]
 9         public string Name { get; set; }
10         [Required]
11         public string Url { get; set; }
12     }

Ctrl+F5运行没有问题。

3.修改Menu类,改成如下:

[Table("Menu")]
    public class Menu
    {
        [Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int ID { get; set; }
        [Required]
        public int PID { get; set; }
        [Required]
        public string Name { get; set; }
        [Required]
        public string Url { get; set; }
        public string Test { get; set; }
    }

再次运行,发现此时报错

报错的原因是因为数据库的结构已经改变,此时有两种方法可以解决该问题。

1.设置每次数据库结构改变之后都删除原先的数据库再重建

只需要加上下面的代码:

 public Context()
            : base("name=ConnStr")
        {
            Database.SetInitializer(new DropCreateDatabaseIfModelChanges<Context>());
            this.Database.Initialize(true);
        }

这样设置之后再次运行没有问题,但是由于数据库被删掉了再重建的,所以原先的数据都没有了。要想保留原先的数据可以使用Migration数据迁移的方式

2.数据迁移

1)点击工具选项卡,选择程序包管理控制台

2)输入命令Enable-Migrations,此时在项目下会新建一个Migrations文件夹,里面包括一个Configuration.cs文件

3)输入命令Add-Migration XXXX,此时会在Migrations文件夹下新建一个yyyyMMddHHmmss_XXXX.cs文件,里面包括一个Down和UP方法,分表表示此次数据迁移回滚和升级的方法

4)输入命令Update-Database-Verbose,数据迁移完成,可以看到数据迁移的SQL语句。

原文地址:https://www.cnblogs.com/hongyan5682/p/5515130.html