我可以使用FluentMigrator创build一个nvarchar(MAX)列吗?

使用FluentMigrator ,使用.AsString()的默认值创build一个nvarchar(255) 。 有没有一种简单的方法(在修改FluentMigrator代码之前)创build一个nvarchar(MAX)types的列?

您可以创build一个扩展方法来包装.AsString(Int32.MaxValue).AsMaxString()

例如

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

好的,我find了。 基本上使用.AsString(Int32.MaxValue)。 可惜没有一个.AsMaxString()方法,但我想很容易放入…

您可以使用AsCustom("nvarchar(max)")并将其打包到扩展名

如果您经常创build具有相同设置或列组的列/表,则应该为您的迁移创build扩展方法!

例如,几乎我的每个表都有CreatedAt和UpdatedAt DateTime列,所以我掀起了一个小扩展方法,所以我可以说:

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

我创build了正确的扩展方法…我知道它的工作原理,但FluentMigrator有很多接口…这里是:

 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,但是应该尽可能地重构!

注意:如果你为你的迁移做辅助/扩展方法,你永远不应该改变这些方法做什么。 如果你这样做,有人可以尝试运行你的迁移,并且事情可能会爆炸,因为你用来创build迁移#1的帮助器方法现在的工作方式与以前不同。

以下是创build列的代码,因为它可以帮助您创build帮助器方法: https : //github.com/schambers/fluentmigrator/blob/master/src/FluentMigrator/Builders/Create/Column/CreateColumnExpressionBuilder.cs