60

FluentMigratorを使用すると、 Columnusingのデフォルトの作成はになり.AsString()ますnvarchar(255)。(FluentMigratorコードを変更する前に)タイプの列を作成する簡単な方法はありますnvarchar(MAX)か?

4

5 に答える 5

81

.AsString(Int32.MaxValue)を.AsMaxString()内にラップする拡張メソッドを作成できます。

例えば

internal static class MigratorExtensions
{
    public static ICreateTableColumnOptionOrWithColumnSyntax AsMaxString(this ICreateTableColumnAsTypeSyntax createTableColumnAsTypeSyntax)
    {
        return createTableColumnAsTypeSyntax.AsString(int.MaxValue);
    }
}
于 2010-07-04T15:30:46.770 に答える
35

OK、見つけました。基本的に、.AsString(Int32.MaxValue)を使用します。残念ながら.AsMaxString()メソッドはありませんが、簡単に挿入できると思います...

于 2010-03-23T00:47:12.480 に答える
24

AsCustom("nvarchar(max)")使用して拡張機能にパックできます

于 2012-03-20T04:52:25.907 に答える
8

同じ設定または列のグループで列/テーブルを頻繁に作成する場合は、移行用の拡張メソッドを作成する必要があります。

たとえば、ほぼすべてのテーブルに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();
    }
}

Table.CreateWithId("Foos")同様に、私のテーブルのほぼすべてに「Id」と呼ばれるint主キーがあるので、常にそのIdを追加するために追加するつもりだと思います。わからない...私は実際に今日FluentMigratorを使い始めたばかりですが、可能な場合は常にリファクタリングする必要があります。

注:移行のためにヘルパー/拡張メソッドを作成する場合は、それらのメソッドの機能を変更しない ください。そうした場合、誰かがあなたの移行を実行しようとする可能性があり、移行#1の作成に使用したヘルパーメソッドの動作が以前とは異なるため、事態が爆発する可能性があります。

ヘルパーメソッドの作成に役立つ場合に備えて、列を作成するためのコードは次のとおりです。https ://github.com/schambers/fluentmigrator/blob/master/src/FluentMigrator/Builders/Create/Column/CreateColumnExpressionBuilder.cs

于 2011-04-04T23:38:04.260 に答える
1

このように拡張するのはどうですか?

public static class StringMaxMigratorExtensions
{
    public static ICreateTableColumnOptionOrWithColumnSyntax AsStringMax(this ICreateTableColumnAsTypeSyntax createTableColumnAsTypeSyntax)
    {
        return createTableColumnAsTypeSyntax.AsCustom("nvarchar(max)");
    }

    public static IAlterColumnOptionSyntax AsStringMax(this IAlterColumnAsTypeSyntax alterColumnAsTypeSyntax)
    {
        return alterColumnAsTypeSyntax.AsCustom("nvarchar(max)");
    }
}
于 2021-01-15T12:12:01.357 に答える