pau*_*guy 2 sql database-migration ef-migrations entity-framework-core
我一直在使用标准的添加迁移方法来更新我在Entity Framework上的aspnet核心数据库。现在,我必须将两个“图像”列移动到新表(及其图像数据)中,从原始表中删除这些列,并在新旧表之间建立外键关系。我有一个有效的SQL脚本来完成所有这些工作。
在正常的EF迁移中,如何执行此sql脚本,并确保后续的add-migration更改将反映我的sql脚本将进行的更改(添加新表/列,从原始表中删除图像列)?
我已经看到了一些对SqlFile的引用,这些引用是从DbMigration派生的,但是没有任何一个适合我的情况。我正在使用EF Core,aspnet core 2.0。
移动填充的、不可为空的列
获取实体框架以创建基础迁移,然后增强输出。
将EmailAddress字段从OldTable到NewTable(MS SQL Server)移动的一些示例代码:
migrationBuilder.AddColumn<string>(
name: "EmailAddress",
table: "NewTable",
defaultValue: "");
migrationBuilder.Sql("UPDATE NewTable SET NewTable.EmailAddress = OldTable.EmailAddress FROM NewTable JOIN OldTable ON NewTable.Id = OldTable.NewTableId");
migrationBuilder.AlterColumn<string>(
name: "EmailAddress",
table: "NewTable",
nullable: false,
defaultValue: "");
migrationBuilder.DropColumn(
name: "EmailAddress",
table: "OldTable");
Run Code Online (Sandbox Code Playgroud)
请记住,这需要发生在Up()and 上Down(),除非Down()撤消操作。
您可以编辑创建的迁移类(Up和Down方法),并在正确的位置包含所需的任何SQL:
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "MyExtraColumn",
table: "MySuperTable");
migrationBuilder.Sql("DROP DATABASE [master]"); // <<< Anything you want :)
migrationBuilder.DropColumn(
name: "MyExtraColumn2",
table: "MySuperTable");
}
Run Code Online (Sandbox Code Playgroud)
您的责任是不要“破坏”数据库架构(从EntityFramework的角度来看),并提供可靠的Down脚本以能够向上/向下/向上/向下迁移多次。
此外,如果您要删除迁移并重新添加迁移,请不要忘记再次重新添加SQL。
| 归档时间: |
|
| 查看次数: |
3453 次 |
| 最近记录: |