zoukankan      html  css  js  c++  java
  • 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语句。

  • 相关阅读:
    Vim 使用设置
    stm32之CAN发送、接收详解
    stm32内部的CAN总线
    stm32之CAN总线基础
    JavaScript之Ajax
    JavaScript之insertBefore()和自定义insertAfter()的用法。
    JavaScript之向文档中添加元素和内容的方法
    JavaScript之共享onload
    JavaScrtip之JS最佳实践
    XX秘籍
  • 原文地址:https://www.cnblogs.com/hongyan5682/p/5515130.html
Copyright © 2011-2022 走看看