CodeFirst数据迁移
Posted 洪研
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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语句。
以上是关于CodeFirst数据迁移的主要内容,如果未能解决你的问题,请参考以下文章