Я использую 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
FluentMigrator не откатывает миграцию ⇐ C#
Место общения программистов C#
1737040547
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");
}
Мысли?
[b]ОБНОВЛЕНИЕ[/b]
Вот версия для создания таблицы:
[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" });
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/18835999/fluentmigrator-not-rolling-back-migration[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия