2017-07-28 4 views
2

したがって、私は再利用可能なライブラリを作成しています。 ORM操作には、コードによるNhibernateマッピングが使用されます。このライブラリを利用するサービスは複数ありますので、ライブラリを可能な限り動的に動作させたいと考えています。Nhibernate:1つのエンティティクラスの複数のクラスマップ

複数のサービスがあり、サービスごとにデータベース内に特定のテーブルがあり、サービス名の前にサービス名があります。 Unityはこの接頭辞を挿入し、1つのサービスしか使用しない場合はすべてうまく動作します。

今は、複数のサービスを読み込んで組み合わせるサービスを作成する必要があります。したがって、このlibdummyアイテムは、異なるテーブル接頭辞で複数回マッピングする必要があります。

public class LibDummy 
{ 
    public virtual int Id { get; set; } 
    public virtual string Guid { get; set; } 
} 

public class LibDummyMapping : ClassMapping<LibDummy> 
{ 
    public LibDummyMapping(ServiceName service) 
    { 
     Table($"{service.Name}_LibDummy"); 

     Id(o => o.Id, m => m.Column("Id")); 
     Property(o => o.Guid, m => m.Column("Guid")); 
    } 
} 

私はこのようにそれをやってみました:

public class FirstLibDummyMapping : LibDummyMapping 
{ 
    public FirstLibDummyMapping (ServiceName service) : base(service) 
    { 
    } 
} 

public class SecondLibDummyMapping : LibDummyMapping 
{ 
    public SecondLibDummyMapping (ServiceName service) : base(service) 
    { 
    } 
} 

しかし、これは "重複クラス/エンティティマッピング" エラーがスローされます。 同じエンティティに対して2つの異なるクラスマップを使用すると、既にマッピングされたコレクションのコレクションがスローされます。

理想的には、ライブラリにネイティブに使用できる動的クラスマップが1つありますが、それは私が推測するオプションではありませんか?

これについてのアイデア、またはこれだけはうまくいくものではありませんか?

答えて

0

すべてのNHibernateの達人は決定的な答えを持っていますか?

関連する問題