У меня есть около 40 миграций в моем текущем приложении .NET Framework. Я портирую базу данных и все ее репозитории в библиотеку .NET Standard, потому что новое приложение написано на .NET Core, что приводит к двойной реализации репозиториев, а в приложении .NET Core нам пришлось использовать Dapper, чтобы не конфликтовать ни с чем. еще.
Итак, я мог бы легко перенести IdentityDbContext
и все остальные связанные вещи на EntityFrameworkCore
.
Но теперь Миграции. Я знаю, что у Microsoft есть документ по извлечению моделей и 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);
}