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

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

背景

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

要求

已安装NuGet

过程示例

//原modelusing 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;}

}//新modelusing 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中配置数据库连接:

2:打开NuGet控制台:

mysql-tutorials-122319.html

test.jsp?url=http%3A%2F%2Fimg.my.csdn.net%2Fuploads%2F201212%2F09%2F1355045454_8945.jpg&refer=http%3A%2F%2Fblog.csdn.net%2Fluoyeyu1989%2Farticle%2Fdetails%2F8275237

mysql-tutorials-122319.html

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.

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

mysql-tutorials-122319.html

test.jsp?url=http%3A%2F%2Fimg.my.csdn.net%2Fuploads%2F201212%2F09%2F1355045496_2062.jpg&refer=http%3A%2F%2Fblog.csdn.net%2Fluoyeyu1989%2Farticle%2Fdetails%2F8275237

打开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

test.jsp?url=http%3A%2F%2Fimg.my.csdn.net%2Fuploads%2F201212%2F09%2F1355045542_1036.jpg&refer=http%3A%2F%2Fblog.csdn.net%2Fluoyeyu1989%2Farticle%2Fdetails%2F8275237

mysql-tutorials-122319.html

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

3:

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值