Могу ли я создать столбец nvarchar (MAX) с помощью FluentMigrator? - PullRequest
47 голосов
/ 23 марта 2010

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

Ответы [ 4 ]

63 голосов
/ 04 июля 2010

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

например,

internal static class MigratorExtensions
{
    public static ICreateTableColumnOptionOrWithColumnSyntax AsMaxString(this ICreateTableColumnAsTypeSyntax createTableColumnAsTypeSyntax)
    {
        return createTableColumnAsTypeSyntax.AsString(int.MaxValue);
    }
}
26 голосов
/ 23 марта 2010

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

18 голосов
/ 20 марта 2012

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

8 голосов
/ 05 апреля 2011

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

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

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

Я думаю Я правильно создал метод Расширения ... Я знаю, что он работает, но FluentMigrator имеет LOT интерфейсов ... вот оно:

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

...