首页 > 数据库 > mysql教程 > Code First Migrations更新数据库结构(数据迁移)

Code First Migrations更新数据库结构(数据迁移)

WBOY
发布: 2016-06-07 15:30:02
原创
1518 人浏览过

背景 code first起初当修改model后,要持久化至数据库中时,总要把原数据库给删除掉再创建(DropCreateDatabaseIfModelChanges),此时就会产生一个问题,当我们的旧数据库中包含一些测试数据时,当持久化更新后,原数据将全部丢失,故我们可以引入EF的数据

背景

code first起初当修改model后,要持久化至数据库中时,总要把原数据库给删除掉再创建(DropCreateDatabaseIfModelChanges),此时就会产生一个问题,当我们的旧数据库中包含一些测试数据时,当持久化更新后,原数据将全部丢失,故我们可以引入EF的数据迁移功能来完成。


要求

  1. 已安装NuGet

过程示例

//原model
登录后复制
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
public class Lesson {
    public int lessonID { get; set; }
    [Required]
    [MaxLength(50)]
    public string lessonName { get; set; }
    [Required]
    public string teacherName { get; set; }
    public virtual UserInfo UserInfo{get;set;}
}
登录后复制
//新model
登录后复制
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
public class Lesson {
    public int lessonID { get; set; }
    [Required]
    [MaxLength(50)]
    public string lessonName { get; set; }
    [Required]
    [MaxLength(10)]
    public string teacherName { get; set; }
    public virtual UserInfo UserInfo{get;set;}
}
登录后复制
注:区别在于,我们给teacherName属性加了一个长度限制。


接下来,我们将开始持久化此model至数据库中(我们现在只是对属性作修改,此时数据库中此字段的长度为nvarchar(max),并不是nvarchar(10))


1:在config中配置数据库连接:

  <connectionstrings>
    <add name="TestUsersDB" connectionstring="Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=TestUsersDB;Data Source=XCL-PC\SQLEXPRESS" providername="System.Data.SqlClient"></add>
  </connectionstrings>
登录后复制

2:打开NuGet控制台:

Code First Migrations更新数据库结构(数据迁移)



3:运行命令Enable-Migrations

可能会出现如下错误:

Checking if the context targets an existing database...
Detected database created with a database initializer. Scaffolded migration '201212090821166_InitialCreate' corresponding to existing database. To use an automatic migration instead, delete the Migrations folder and re-run Enable-Migrations specifying the -EnableAutomaticMigrations parameter.
Code First Migrations enabled for project MvcApplication1.

此时项目会出现如下文件夹:


Code First Migrations更新数据库结构(数据迁移)

打开configuation.cs,将作出如下修改:

        public Configuration()
        {
            AutomaticMigrationsEnabled = true;
        }
登录后复制

再次执行Update-Database:

因为我把长度从max改为10,在更新数据结构时,它认为此操作会导致数据丢失,如下:

Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
No pending code-based migrations.
Applying automatic migration: 201212090848057_AutomaticMigration.
Automatic migration was not applied because it would result in data loss.

如果确保没事,只需给此命令加个强制执行的参数即可:

Enable-Migrations -Force

最后再次执行:Update-Database

Code First Migrations更新数据库结构(数据迁移)


数据库中的原数据也没有丢失!


3


相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板