2013-08-28 11 views
5

Ho un metodo di estensione che viene utilizzato da diverse tabelle:Posso utilizzare un metodo di estensione per aggiungere una colonna E un vincolo di chiave esterna con Fluent Migrator?

public static ICreateTableColumnOptionOrWithColumnSyntax WithUser(this ICreateTableWithColumnSyntax tableWithColumnSyntax) 
{ 
    return tableWithColumnSyntax 
     .WithColumn("UserId") 
      .AsInt32() 
      .Nullable(); 
} 

Ecco una tabella di esempio utilizza:

Create.Table("UserSettings") 
    .WithUser() 
    .WithColumn("SomeValue") 
     .AsString(1) 
     .Nullable(); 

Poi devono aggiungere manualmente una chiave esterna ogni volta così:

Create.ForeignKey() 
    .FromTable("UserSettings") 
     .ForeignColumn("UserID") 
    .ToTable("Users") 
     .PrimaryColumn("Id"); 

Esiste un modo per impacchettare la dichiarazione di chiave esterna nel metodo di estensione WithUser() in modo che I (e, più importante, altre persone nel mio team) non sia necessario specificarlo ogni volta?

+0

Qualcuno ha un'idea? – Jared

risposta

10

Questo ha finito per essere più facile del previsto. Ecco il codice per fare questo:

public static ICreateTableColumnOptionOrWithColumnSyntax WithUser(this ICreateTableWithColumnSyntax tableWithColumnSyntax) 
{ 
    return tableWithColumnSyntax 
     .WithColumn("UserId") 
      .AsInt32() 
      .Nullable() 
      .ForeignKey("Users", "Id"); 
} 

Vorrei solo che questo è stato meglio documentato da qualche parte.

+0

Sentiti libero di aggiungere questo al wiki di FluentMigrator. È aperto a tutti. –