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

好的,我找到了。基本上,使用 .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();
    }
}

同样,几乎我的每个表都有一个名为“Id”的 int 主键,所以我想我要添加Table.CreateWithId("Foos")以始终为我添加该 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 回答