2009-10-05 21 views
5

W obecnej aplikacji używam Fluent NHibernate do skonfigurowania NHibernate do użycia jako ORM. Chcę móc dodać prefiks do wszystkich nazw tabel używanych w aplikacji, więc jeśli używam bazy danych, która już obsługuje inną aplikację, nie ma konfliktów nazw między tymi dwiema aplikacjami.Jak skonfigurować NHibernate (lub Fluent NHib), aby dodać prefiks nazwy tabeli do wszystkich nazw tabel?

Jeśli na przykład chcę dodać przedrostek Portal_ do każdej tabeli, tabela Users stanie się Portal_Users.

Oczywiście wiem, jak skonfigurować nazwę każdej tabeli w każdym pliku odwzorowania, ale to naprawdę nie jest dobre rozwiązanie dla tego, co próbuję zrobić. Jeśli kiedykolwiek chciałbym zmienić prefiks, byłbym zmuszony zmienić każdy z plików mapujących. Chcę móc dodać (lub zmienić) prefiks do wszystkich nazw tabel w jednym miejscu w moim kodzie lub konfiguracji.

Jak dodać prefiks do wszystkich nazw tabel w aplikacji przy użyciu NHibernate (lub Fluent NHibernate)?

Odpowiedz

2

Do płynnego wdrożenia ..

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

Dzięki, tego właśnie potrzebowałem –

3

można zaimplementować własną INamingStrategy i podać go do swojej konfiguracji:

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

Dziękuję za odpowiedź! –

+0

Dokładnie to, czego szukałem, i zdecydowanie najłatwiejszy sposób na osiągnięcie tego! – Sean

Powiązane problemy