Могу ли я создать столбец nvarchar (MAX) с помощью FluentMigrator?
-
21-09-2019 - |
Вопрос
С использованием СвободноМигратор, создание по умолчанию Column
с использованием .AsString()
приводит к nvarchar(255)
.Есть ли простой способ (прежде чем я изменю код FluentMigrator) создать столбец типа nvarchar(MAX)
?
Решение
Вы можете создать метод расширения для переноса .AsString(Int32.MaxValue) в .AsMaxString().
например
internal static class MigratorExtensions
{
public static ICreateTableColumnOptionOrWithColumnSyntax AsMaxString(this ICreateTableColumnAsTypeSyntax createTableColumnAsTypeSyntax)
{
return createTableColumnAsTypeSyntax.AsString(int.MaxValue);
}
}
Другие советы
Хорошо, я нашел это.По сути, используйте .AsString(Int32.MaxValue).Жаль, что нет метода .AsMaxString(), но я думаю, его достаточно легко вставить...
Вы можете использовать AsCustom("nvarchar(max)")
и упакуйте его в расширение
Если вы часто создаете столбцы/таблицы с одинаковыми настройками или группами столбцов, вам следует создавать методы расширения для своих миграций!
Например, почти каждая из моих таблиц имеет столбцы CreatedAt и UpdatedAt DateTime, поэтому я придумал небольшой метод расширения, чтобы можно было сказать:
Create.Table("Foos").
WithColumn("a").
WithTimestamps();
я думать Я правильно создал метод Extension...Я знаю, что это работает, но у FluentMigrator есть МНОГО интерфейсов...вот:
public static class MigrationExtensions {
public static ICreateTableWithColumnSyntax WithTimestamps(this ICreateTableWithColumnSyntax root) {
return root.
WithColumn("CreatedAt").AsDateTime().NotNullable().
WithColumn("UpdatedAt").AsDateTime().NotNullable();
}
}
Точно так же почти каждая из моих таблиц имеет первичный ключ int с именем «Id», поэтому я думаю, что добавлю Table.CreateWithId("Foos")
всегда добавлять этот идентификатор для меня.Не уверен ...На самом деле я только сегодня начал использовать FluentMigrator, но по возможности всегда следует проводить рефакторинг!
ПРИМЕЧАНИЕ: Если вы создаете вспомогательные методы/расширения для своих миграций, вам следует никогда всегда всегда измените то, что делают эти методы.Если вы это сделаете, кто-то может попытаться запустить вашу миграцию, и все может взорваться, потому что вспомогательные методы, которые вы использовали для создания миграции № 1, теперь работают иначе, чем раньше.
Вот код для создания столбцов, если он поможет вам создавать вспомогательные методы: https://github.com/schambers/fluentmigrator/blob/master/src/FluentMigrator/Builders/Create/Column/CreateColumnExpressionBuilder.cs