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

StackOverflow https://stackoverflow.com/questions/2496695

  •  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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top