Подтвердить что ты не робот

Можно ли создать столбец nvarchar (MAX) с помощью FluentMigrator?

Используя FluentMigrator, создание по умолчанию Column с помощью .AsString() приводит к nvarchar(255). Есть ли простой способ (до того, как я модифицирую код FluentMigrator), чтобы создать столбец типа nvarchar(MAX)?

4b9b3361

Ответ 1

Вы можете создать метод расширения для wrap.AsString(Int32.MaxValue) внутри .AsMaxString()

например.

internal static class MigratorExtensions
{
    public static ICreateTableColumnOptionOrWithColumnSyntax AsMaxString(this ICreateTableColumnAsTypeSyntax createTableColumnAsTypeSyntax)
    {
        return createTableColumnAsTypeSyntax.AsString(int.MaxValue);
    }
}

Ответ 2

ОК, я нашел его. В принципе, используйте .AsString(Int32.MaxValue). Жаль, что нет метода .AsMaxString(), но я думаю, это достаточно легко вставить...

Ответ 3

Вы можете использовать AsCustom("nvarchar(max)") и упаковать его в расширение

Ответ 4

Если вы часто создаете столбцы/таблицы с одинаковыми настройками или группами столбцов, вы должны создавать методы расширения для своих миграций!

Например, почти у каждой из моих таблиц есть столбцы CreateAt и UpdateAt DateTime, поэтому я взломал небольшой метод расширения, поэтому могу сказать:

Create.Table("Foos").
    WithColumn("a").
    WithTimestamps();

Я думаю, что я правильно создал метод расширения... Я знаю, что это работает, но у 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"), чтобы всегда добавлять этот Id для меня. Не уверен... Я фактически начал использовать FluentMigrator сегодня, но вы всегда должны быть рефакторингом, когда это возможно!

ПРИМЕЧАНИЕ.. Если вы делаете вспомогательные/расширительные методы для своих миграций, никогда не следует когда-либо изменять то, что делают эти методы. Если вы это сделаете, кто-то может попытаться запустить ваши миграции, и все может взорваться, потому что вспомогательные методы, которые вы использовали для создания миграции # 1, работают по-другому, чем раньше.

Вот код для создания столбцов, который поможет вам создать вспомогательные методы: https://github.com/schambers/fluentmigrator/blob/master/src/FluentMigrator/Builders/Create/Column/CreateColumnExpressionBuilder.cs