Utilizzando FluentMigrator, la creazione di default di un Column
utilizzando .AsString()
risultati in un nvarchar(255)
. C'è un modo semplice (prima di modificare il codice FluentMigrator) per creare una colonna di tipo nvarchar(MAX)
?Posso creare una colonna di nvarchar (MAX) usando FluentMigrator?
risposta
È possibile creare un metodo di estensione per avvolgere .AsString (Int32.MaxValue) entro .AsMaxString()
per esempio
internal static class MigratorExtensions
{
public static ICreateTableColumnOptionOrWithColumnSyntax AsMaxString(this ICreateTableColumnAsTypeSyntax createTableColumnAsTypeSyntax)
{
return createTableColumnAsTypeSyntax.AsString(int.MaxValue);
}
}
OK, l'ho trovato. Fondamentalmente, utilizzare .AsString (Int32.MaxValue). Peccato non ci sia un metodo .AsMaxString(), ma credo che sia abbastanza facile da mettere in ...
Se si crea spesso colonne/tabelle con le stesse impostazioni o gruppi di colonne, si dovrebbe essere la creazione di metodi di estensione per i vostri migrazioni!
Per esempio, quasi ogni uno dei miei tavoli ha CreatedAt e UpdatedAt DateTime colonne, così ho montata su un po 'di metodo di estensione in modo che posso dire:
Create.Table("Foos").
WithColumn("a").
WithTimestamps();
ho penso ho creato il metodo di estensione correttamente ... so che funziona, ma FluentMigrator ha un sacco di interfacce ... eccola:
public static class MigrationExtensions {
public static ICreateTableWithColumnSyntax WithTimestamps(this ICreateTableWithColumnSyntax root) {
return root.
WithColumn("CreatedAt").AsDateTime().NotNullable().
WithColumn("UpdatedAt").AsDateTime().NotNullable();
}
}
Allo stesso modo, quasi ogni uno dei miei tavoli ha un int chiave primaria chiamata 'Id', quindi penso di aggiungere Table.CreateWithId("Foos")
per aggiungere sempre quell'Id per me. Non sono sicuro ... In realtà ho appena iniziato a usare FluentMigrator oggi, ma dovresti sempre refactoring quando possibile!
NOTA: Se fate metodi di aiuto/estensione per le migrazioni, si dovrebbe mai maimai cambiamento che cosa questi metodi fare. Se lo fai, qualcuno potrebbe provare a eseguire le tue migrazioni e le cose potrebbero esplodere perché i metodi di supporto utilizzati per creare Migration # 1 funzionano in modo diverso ora rispetto a prima.
Ecco il codice per la creazione di colonne in caso essa consente di creare metodi di supporto: https://github.com/schambers/fluentmigrator/blob/master/src/FluentMigrator/Builders/Create/Column/CreateColumnExpressionBuilder.cs
È possibile utilizzare AsCustom("nvarchar(max)")
e confezionarle per estensione