2009-07-20 21 views
23

私はこのようになります私のドメインモデルのルートでクラスを持っています:私のマッピングについてはNHibernateのDuplicateMappingExceptionは

namespace Domain.SubDomain 
{ 
    public class Foo { ... } 
} 

、私はDomain.SubDomain名前空間で見つかったドメインクラスのマッピングが含まれていSubDomainというサブディレクトリとMappingディレクトリを持っています。それらはすべて同じアセンブリ内にあります。

しかし、それらをNHibernateでロードしようとすると、私はを取得し続けます...両方のFoosが異なる名前空間を持っています。

var cfg = new Configuration() 
    .Configure()     
    .AddAssembly("Domain"); 

は、どのように私は私が同じ名前(ただし、異なる名前空間)との2つのエンティティを使用できるようにNHibernateはを伝えることができます:私はNHibernateの設定をロードするために使用していたコードはこれですか?

+0

Fluent.nHibernateに関する同じ質問:https://stackoverflow.com/questions/1290466/ – Malcolm

答えて

22

私はHibernateのウェブサイトにanswerが見つかりました:

を使用すると、同じ非修飾名を持つ2つの永続クラス を持っている場合、あなたは は=「false」の自動インポートを設定する必要があります。同じ 「インポートされた」名前に2つのクラスを割り当てるように を試行すると、 例外が発生します。

これを<hibernate-mapping>タグの属性として使用しました。

+0

NHibernate.Mapping.Attributes **を使用してマッピングする方法を知っている人はいますか? –

3

あなたはそうのようなマッピング・ドキュメント内のクラスの完全修飾名を指定することができます。SeeMe.Dataはアセンブリである

<class name="SeeMe.Data.People.Relationship, SeeMe.Data" ... > ... 

+1

「NHibernate.DuplicateMappingException:重複インポート:FooはDomain.SubDomain.Foo、ドメイン、バージョン= 1.0.0.0、Culture =ニュートラル、PublicKeyToken = nullおよびDomain.Foo、ドメイン、バージョン= 1.0.0.0、Culture =ニュートラル、PublicKeyToken = null(自動インポート= "false"を使用してください) ' – cdmckay

+1

Dammit、コピーしてペーストするとすぐに、私は 'auto-import =" false "の提案を見ました...そしてそれはうまくいったのです。 – cdmckay

+1

hehe saight、nHibernate rocksしかし、それはあまり直感的ではないように感じます。私はいくつかの愚かなマッピングの問題に頭を叩くのに多くの時間を費やしました。 –

16

私は同じ問題がありました。

Fluently.Configure() 
      .Database(MsSqlConfiguration.MsSql2008 
       .ConnectionString(...) 
       .AdoNetBatchSize(500)) 
      .Mappings(m => m.FluentMappings 
       .Conventions.Setup(x => x.Add(AutoImport.Never())) 
       .AddFromAssembly(...) 
       .AddFromAssembly(...) 
       .AddFromAssembly(...) 
       .AddFromAssembly(...)) 
      ; 

輸入の部分は次のとおりです:.Conventions.Setup(x => x.Add(AutoImport.Never()))私はこのようにそれを解決しました。 この設定ですべてうまく動作しているようです。

+1

この設定で使用するテーブル名の説明を追加してください。ありがとう。 –