2009-10-05 10 views
5

私が開発している現在のアプリケーションでは、NHibernateをORMとして使用するようにFluent NHibernateを使用しています。アプリケーションで使用されているすべてのテーブル名に接頭辞を追加できるようにしたいので、すでに別のアプリケーションを処理しているデータベースを使用すると、2つのアプリケーション間で名前の競合が発生しないようにします。NHibernate(またはFluent NHib)を設定して、すべてのテーブル名にテーブル名接頭辞を追加するにはどうすればよいですか?

たとえば、Portal_の接頭辞を各テーブルに追加する場合は、UsersテーブルはPortal_Usersになります。

もちろん、私は各マッピングファイルで各テーブル名を設定する方法を知っていますが、それは本当に私がしようとしていることのための良い解決策ではありません。プレフィックスを変更したければ、それぞれのマッピングファイルを変更する必要があります。私は、コードまたは構成内の単一の場所にあるすべてのテーブル名にプレフィックスを追加(または変更)できるようにしたいと考えています。

NHibernate(またはFluent NHibernate)を使用するアプリケーション内のすべてのテーブル名にプレフィックスを追加するにはどうすればよいですか?

答えて

2

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

ありがとう、それは私が必要だった –

3

独自01​​を実装して、コンフィギュレーションのためにそれを指定することができます..

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>(); 

を......流暢な実施のために

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

答えをありがとう! –

+0

まさに私が探していたもので、これを実現する最も簡単な方法です! – Sean

関連する問題