57 votes

Puis-je créer une colonne de nvarchar (MAX) à l'aide de FluentMigrator?

Avec FluentMigrator (http://code.google.com/p/fluentmigrator/), la création par défaut d'une colonne à l'aide de .AsString () donne un nvarchar (255). Existe-t-il un moyen simple (avant de modifier le code FluentMigrator) de créer une colonne de type nvarchar (MAX)?

79voto

Jon Cahill Points 2516

Vous pouvez créer une méthode d'extension pour envelopper .AsString (Int32.MaxValue) dans .AsMaxString ()

par exemple

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

33voto

Darren Oster Points 2536

OK, je l'ai trouvé. Fondamentalement, utilisez .AsString (Int32.MaxValue). Dommage qu'il n'y ait pas de méthode .AsMaxString (), mais je suppose que c'est assez facile à mettre en ...

23voto

KregHEk Points 80

Vous pouvez utiliser AsCustom("nvarchar(max)") et le compresser à l'extension

8voto

remi Points 119

Si vous créez souvent des colonnes, tableaux, avec les mêmes paramètres ou groupes de colonnes, vous devez créer les méthodes d'extension pour votre migrations!

Par exemple, presque tous l'un de mes tableaux a CreatedAt et UpdatedAt colonnes DateTime, donc j'ai préparé un peu de méthode d'extension donc je peux dire que:

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

Je pense que j'ai créé la méthode d'Extension correctement ... je sais que ça fonctionne, mais FluentMigrator a BEAUCOUP d'interfaces ... ici, il est:

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

De même, près de chacun de mes tableaux est un int primary key appelé 'Id', donc je pense que je vais ajouter Table.CreateWithId("Foos") d'ajouter toujours d'identification que pour moi. Je ne sais pas ... en fait je viens de commencé à utiliser FluentMigrator aujourd'hui, mais vous devriez toujours être refactoring quand c'est possible!

REMARQUE: Si vous faites helper/méthodes d'extension pour votre migrations, vous devriez jamais jamais, jamais changer ce que ces méthodes ne. Si vous le faites, quelqu'un pourrait essayer de lancer votre migrations et les choses pourraient exploser parce que les méthodes d'assistance que vous avez utilisé pour créer la Migration #1 fonctionne différemment maintenant qu'ils l'ont fait plus tôt.

Voici le code pour créer des colonnes au cas où cela vous aide à créer des méthodes d'assistance: https://github.com/schambers/fluentmigrator/blob/master/src/FluentMigrator/Builders/Create/Column/CreateColumnExpressionBuilder.cs

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X