2009-10-05 5 views
5

Nell'applicazione corrente che sto sviluppando sto utilizzando Fluent NHibernate per configurare NHibernate da utilizzare come un ORM. Voglio essere in grado di aggiungere un prefisso a tutti i nomi tabella utilizzati nell'applicazione, in modo che se utilizzo un database che sta già servendo un'altra applicazione, non ci sono conflitti di denominazione tra le due applicazioni.Come configurare NHibernate (o Fluent NHib) per aggiungere un prefisso del nome della tabella a tutti i nomi delle tabelle?

Ad esempio, se volevo aggiungere un prefisso di Portal_ a ciascuna tabella, la tabella Users diventerebbe Portal_Users.

Ovviamente, so come configurare ciascun nome di tabella in ogni file di mapping, ma non è davvero una buona soluzione per quello che sto cercando di fare. Se mai volessi cambiare il prefisso, sarei costretto a cambiare ciascuno dei file di mappatura. Voglio essere in grado di aggiungere (o modificare) il prefisso a tutti i nomi delle tabelle in un'unica posizione nel mio codice o configurazione.

Come si aggiunge un prefisso a tutti i nomi di tabella all'interno di un'applicazione che utilizza NHibernate (o Fluent NHibernate)?

risposta

2

Per un'implementazione fluente ..

public class AutoPersistenceModelGenerator : IAutoPersistenceModelGenerator 
    { 
     public AutoPersistenceModel Generate() 
     { 
      var mappings = new AutoPersistenceModel(); 
      mappings.AddEntityAssembly(typeof(User).Assembly).Where(GetAutoMappingFilter); 
      mappings.Conventions.Setup(GetConventions()); 

..... 
    private Action<IConventionFinder> GetConventions() 
    { 
     return c => 
     { 
      c.Add<PrimaryKeyConvention>(); 
      c.Add<ReferenceConvention>(); 
      c.Add<HasManyConvention>(); 
      c.Add<TableNameConvention>(); 

......

 public class TableNameConvention : IClassConvention 
     { 
      public void Apply(FluentNHibernate.Conventions.Instances.IClassInstance 
instance) 
      { 
       instance.Table(Inflector.Net.Inflector.Pluralize("Portal_" + 
    instance.EntityType.Name)); 
       } 
      } 
+0

Grazie, è quello di cui avevo bisogno –

3

È possibile implementare il proprio INamingStrategy e specificare che per la configurazione:

Configuration config = new Configuration(); 
config.SetNamingStrategy(new MyTablePrefixStrategy()); 
+0

Grazie per la risposta! –

+0

Esattamente quello che stavo cercando, e di gran lunga il modo più semplice per raggiungerlo! – Sean