我目前的.NET Framework应用程序中有大约40次迁移。我正在将数据库及其所有存储库移植到.NET标准库,因为新的应用程序是用.NET Core编写的,这会导致存储库的双重实现,而在.NET Core应用程序中,我们必须使用Dapper来与任何东西冲突其他
因此,我可以轻松地将IdentityDbContext
和所有其他相关内容移植到EntityFrameworkCore
。
但现在是迁移。我知道Microsoft有一个document从数据库中检索模型和DbContext。但是,这会为所有配置创建一个非常长的OnModelCreating
方法。看起来这可以工作但是,如果我想做任何新的更改,我必须在那里和新的迁移中更改它,并确保没有冲突。
此外,我们当前的迁移具有手动调整,以确保它适用于新数据库或现有生产数据库。有些事情不是这样照顾的。
我想要的是将现有的单个迁移文件迁移到新的代码语法。我不在乎是否省略了手动调整,但如果以某种方式将最大的事情自动转换。
例如:
.NET Framework:
public override void Up()
{
CreateTable(
"dbo.AdditionalCosts",
c => new
{
additionalCostId = c.Int(nullable: false, identity: true),
shoppingCartId = c.Int(),
shoppingCartProductId = c.Int(),
orderId = c.Int(),
inclPrice = c.Decimal(nullable: false, precision: 18, scale: 3),
taxPrice = c.Decimal(nullable: false, precision: 18, scale: 3),
description = c.String(),
title = c.String(),
costType = c.Int(nullable: false),
})
.PrimaryKey(t => t.additionalCostId)
.ForeignKey("dbo.Orders", t => t.orderId)
.ForeignKey("dbo.ShoppingCartProducts", t => t.shoppingCartProductId)
.ForeignKey("dbo.ShoppingCarts", t => t.shoppingCartId)
.Index(t => t.shoppingCartId)
.Index(t => t.shoppingCartProductId)
.Index(t => t.orderId);
}
.NET Core:
是否有可用的转换工具?
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
"dbo.AdditionalCosts",
c => new
{
additionalCostId = c.Column<int>(nullable: false), //idnetity: true?
shoppingCartId = c.Column<int>(),
shoppingCartProductId = c.Column<int>(),
orderId = c.Column<int>(),
inclPrice = c.Column<decimal>(nullable: false), //precision: 18, scale: 3?
taxPrice = c.Column<decimal>(nullable: false), //precision: 18, scale: 3
description = c.Column<string>(),
title = c.Column<string>(),
costType = c.Column<int>(nullable: false),
}, constraints: table =>
{
table.PrimaryKey("PK_AdditionalCost", t => t.additionalCostId);//default naming of PK_? why not automated anymore! :(
//etc..
});
//.PrimaryKey(t => t.additionalCostId)
//.ForeignKey("dbo.Orders", t => t.orderId)
//.ForeignKey("dbo.ShoppingCartProducts", t => t.shoppingCartProductId)
//.ForeignKey("dbo.ShoppingCarts", t => t.shoppingCartId)
//.Index(t => t.shoppingCartId)
//.Index(t => t.shoppingCartProductId)
//.Index(t => t.orderId);
}
答案 0 :(得分:0)
我最终有几个选择:
所以..最终我只使用当前代码生成了一个新的迁移,在Visual Studio中进行了一次Schema比较,以检查真正的差异,并根据需要调整迁移。然后,在释放时将当前数据迁移到新数据库。我目前正在这样做,所以我可能会稍后调整这个答案。