update migrator migrations fluentmigrator fluent-migrator

fluent migrator - migrations - ¿Puedo crear una columna de nvarchar(MAX) con FluentMigrator?



fluentmigrator 1.6 2 (4)

Usando FluentMigrator , la creación predeterminada de una Column usando .AsString() da como resultado un nvarchar(255) . ¿Existe una forma sencilla (antes de modificar el código FluentMigrator) para crear una columna de tipo nvarchar(MAX) ?


OK, lo encontré. Básicamente, utilice .AsString (Int32.MaxValue). Lástima que no haya un método .AsMaxString (), pero creo que es bastante fácil de poner ...


Podría crear un método de extensión para ajustar .AsString (Int32.MaxValue) dentro de .AsMaxString ()

p.ej

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


Puede usar AsCustom("nvarchar(max)") y empaquetarlo en la extensión


Si a menudo crea columnas / tablas con la misma configuración o grupos de columnas, ¡debería crear métodos de extensión para sus migraciones!

Por ejemplo, casi todas mis tablas tienen columnas CreatedAt y UpdatedAt DateTime, por lo que preparé un pequeño método de extensión para que pueda decir:

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

Creo que creé el método de Extensión correctamente ... Sé que funciona, pero FluentMigrator tiene MUCHAS interfaces ... aquí está:

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

De manera similar, casi todas mis tablas tienen una clave principal int denominada ''Id'', por lo que creo que voy a agregar Table.CreateWithId("Foos") para agregar siempre esa Id. No estoy seguro ... en realidad acabo de comenzar a usar FluentMigrator hoy, ¡pero siempre deberías estar refactorizando cuando sea posible!

NOTA: Si crea métodos de ayuda / extensión para sus migraciones, nunca debe cambiar lo que hacen esos métodos. Si lo hace, alguien podría intentar ejecutar sus migraciones y las cosas podrían explotar porque los métodos de ayuda que usó para crear la Migración # 1 funcionan de manera diferente ahora que antes.

Aquí está el código para crear columnas en caso de que le ayude a crear métodos de ayuda: https://github.com/schambers/fluentmigrator/blob/master/src/FluentMigrator/Builders/Create/Column/CreateColumnExpressionBuilder.cs