web-dev-qa-db-ja.com

FluentMigratorを使用してnvarchar(MAX)の列を作成できますか?

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

54
Darren Oster

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

例えば.

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

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

26
Darren Oster

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

18
KregHEk

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

たとえば、私のテーブルのほぼすべてにCreatedAt列とUpdatedAt DateTime列があるので、少し拡張メソッドを作成して、次のように言うことができます。

_Create.Table("Foos").
    WithColumn("a").
    WithTimestamps();
_

私はthinkExtensionメソッドを適切に作成しました...機能することはわかっていますが、FluentMigratorには[〜#〜] lot [〜#〜]がありますインターフェース...ここにあります:

_public static class MigrationExtensions {
    public static ICreateTableWithColumnSyntax WithTimestamps(this ICreateTableWithColumnSyntax root) {
        return root.
            WithColumn("CreatedAt").AsDateTime().NotNullable().
            WithColumn("UpdatedAt").AsDateTime().NotNullable();
    }
}
_

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

注:移行用のヘルパー/拡張メソッドを作成する場合は、決してevereverこれらのメソッドの動作を変更します。そうすると、マイグレーション#1の作成に使用したヘルパーメソッドの動作が以前とは異なるため、誰かがマイグレーションを実行しようとすると、爆発する可能性があります。

ヘルパーメソッドの作成に役立つ場合に列を作成するためのコードを次に示します。 https://github.com/schambers/fluentmigrator/blob/master/src/FluentMigrator/Builders/Create/Column/CreateColumnExpressionBuilder.cs =

8
remi