FluentMigrator を使用すると、Column
を.AsString()
を使用してデフォルトで作成すると、nvarchar(255)
になります。 (FluentMigratorコードを変更する前に)nvarchar(MAX)
型の列を作成する簡単な方法はありますか?
.AsMaxString()内で.AsString(Int32.MaxValue)をラップする拡張メソッドを作成できます
例えば.
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();
_
私は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 =