FluentMigrator не откатывает миграциюC#

Место общения программистов C#
Ответить
Anonymous
 FluentMigrator не откатывает миграцию

Сообщение Anonymous »

Я использую FluentMigrator (1.1.0) для управления миграцией баз данных в своем проекте. Проект миграции представляет собой библиотеку классов C#, и для запуска изменений я использую свободные инструменты миграции. Моя локальная среда — это экземпляр Windows MySQL, но моя среда разработки — это экземпляр Linux MySQL.

На днях при запуске изменений в среде разработки произошел сбой миграции. Проверив БД, я увидел, что БД не была откатана до состояния, существовавшего до выполнения ревизии.

Ниже представлена ​​неудачная ревизия; почему таблица не вернулась в исходное состояние? Столбцы A, B и C по-прежнему удалены.

public override void Up()
{
Delete
.Column("A").Column("B").Column("C")
.FromTable("TABLENAME");

Delete.FromTable("TABLENAME").IsNull("D");

//FAILS HERE - !!! Cannot change column 'D': used in a foreign key constraint
//'FK_TABLENAME_D_OTHERTABLE_COLUMN'
Alter.Column("D").OnTable("TABLENAME").AsInt32().NotNullable();

Create
.PrimaryKey("PK_TABLENAME")
.OnTable("TABLENAME")
.Columns(new string[] { "D", "E", "F", "G" });
}


Согласно вики, они добавили поддержку миграции, и я проверил, что поведение транзакции по умолчанию — 1 транзакция на миграцию. Я также убедился, что эта простая миграция не откатывается:

public override void Up()
{
Delete
.Column("A").Column("B").Column("C")
.FromTable("Table");

throw new Exception("e");
}


Затем я попробовал эту версию, и она успешно откатилась.

public override void Up()
{
Create.Table("Table")
.WithColumn("Id").AsInt32().PrimaryKey().Identity().NotNullable();

throw new Exception("e");
}


Мысли?

ОБНОВЛЕНИЕ

Вот версия для создания таблицы:

[Migration(49)]
public class _0049_CreateTableNameTable : Migration
{
public override void Up()
{
Create.Table("TableName")
.WithColumn("Id").AsInt32().PrimaryKey().Identity().NotNullable()
.WithColumn("FK1").AsInt32().ForeignKey("OtherTable", "Id").NotNullable()
.WithColumn("FK2").AsInt32().ForeignKey("OtherTable2", "Id").NotNullable()
.WithColumn("FK3").AsInt32().ForeignKey("OtherTable3", "Id").NotNullable()
.WithColumn("FK4").AsInt32().ForeignKey("OtherTable4", "Id").NotNullable()
.WithColumn("CreatedDate").AsDateTime().NotNullable()
.WithColumn("UpdatedDate").AsDateTime().NotNullable();
}
}


Вот версия для удаления таблицы:

[Migration(53)]
public class _0053_AlterTableNameTable : Migration
{
public override void Up()
{
Delete
.Column("Id").Column("UpdatedDate").Column("CreatedDate")
.FromTable("TableName");

Delete.FromTable("TableName").IsNull("FK1");

//FAILS HERE
Alter.Column("FK1").OnTable("TableName").AsInt32().NotNullable();

Create
.PrimaryKey("PK_TableName")
.OnTable("TableName")
.Columns(new string[] { "FK1", "FK2", "FK3", "FK4" });
}
}


Подробнее здесь: https://stackoverflow.com/questions/188 ... -migration
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»