我可以使用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