Code First-数据迁移总结
net吧
全部回复
仅看楼主
level 2
飘扬 楼主
数据迁移分为显示(手动)迁移和隐式(自动)迁移
一、显示迁移(手动)
1. 输入:Enable-Migrations,启动显示数据迁移,如:
在程序没有运行过的情况下,将只生成Configuration.cs配置文件;如果程序运行过,并在SQL Server生成了相应的数据库,则此步骤将生成“20
18020308121
17_InitialCreate.cs和Configuration.cs”两个文件。
2. 如果数据库上下文有修改,需要运用Add-Migration命令,如:
(1)增加新表
如果增加了一个新的类Store,并将其添加到了上下文中
“public DbSet<Store> Stores { get; set; }”,则数据迁移命令如下。
Add-Migration Stores
此步骤将在数据中新建一个名为Stores的表。
(2)修改表字段
上下文中Book定义: public DbSet<Book> Books { get; set; }
Book类增加了一个Note属性,数据迁移命令如下:
Add-Migration BookNote,
此步骤将在Books表中增加Note字段。
注意:修改类中的某个属性,其实相当于删除了一个旧的属性,增加了一个新的属性,因此仍然使用上述命令即可。
3. 更新数据库
Update-Database
二、隐式迁移(自动)
1.设置自动迁移
Enable-Migrations -EnableAutomaticMigrations
2. 数据库与类不同步时,使用Update-Database即可,如:
(1)增加了一个类,数据库中应对应增加一个表
(2)如果是修改了某个类的属性,将有如下问题:
红字部分:Automatic migration was not applied because it would result in data loss. Set AutomaticMigrationDataLossAllowed to 'true' on your DbMigrationsConfiguration to allow application of automatic migrations even if they might cause data loss. Alternately, use Update-Database with the '-Force' option, or scaffold an explicit migration.
按照上述提示,修改配置文件Configuration.cs,如下:
public Configuration()
{
AutomaticMigrationsEnabled = true;
//按照提示进行的修改
AutomaticMigrationDataLossAllowed = true;
}
再次进行更新,成功!
演示与文本有些不太匹配,只要换成文本中具体的表名称就好。
自己的总结,有问题欢迎指正,交流;如有转载、引用请注明出处。
2018年02月03日 13点02分 1
level 2
seed方法还可以做数据初始化,测试数据库跟生产数据库不同步还可以通过还原nuget包版本然后手动修改迁移表内容去修改生产环境数据库
2018年02月04日 04点02分 2
1