0

それはすべてシンプルに見えますが、私の問題に対する答えを見つけることができません。このシンプルで流暢なnhibernateマッピングを生きていくために助けてください。

のは、私が第三のテーブルに単一の参照を保持できる2つのテーブルテーブルAとテーブルBとしましょう:あなたが見ることができるように

public Class ClassA{ 
    public virtual int Id{get;set;} 
    public virtual ClassC ObjAC{get;set;} 
    ... 
} 

public Class ClassB{ 
    public virtual int Id{get;set;} 
    public virtual ClassC ObjBC{get;set;} 
    ... 
} 

public Class ClassC{ 
    public virtual int Id{get;set;} 
    ... 
} 

TableA  TableB  TableC 
ID   ID   ID 
TableC_ID TableC_ID  RandomDataC 
RandomDataA RandomDataB 

は、次のクラスで表現されているがClassAとClassBは、ClassCという単一のプロパティを保持します。

public Class ClassAMap : ClassMap<ClassA>{ 
    public ClassAMap(){ 
     Id(x => x.Id); 
     HasOne(x => x.ObjAC).Cascade.All(); 
     ... 
    } 
} 

public Class ClassBMap : ClassMap<ClassB>{ 
    public ClassBMap(){ 
     Id(x => x.Id); 
     HasOne(x => x.ObjBC).Cascade.All(); 
     ... 
    } 
} 

public Class ClassCMap : ClassMap<ClassC>{ 
    public ClassCMap(){ 
     Id(x => x.Id); 
    } 
} 

私は次のようなマッピングを試みた

(とりわけ...)しかし、マッピングが正しくありません。私はClassCMapにReferencesAnyを持たせましたが、成功しませんでした。

助けてください...

答えて

2

はこれを試してみてください:

public Class ClassAMap : ClassMap<ClassA>{ 
    public ClassAMap(){ 
     Id(x => x.Id); 
     References(x => x.ObjAC, "TableC_ID").Cascade.All(); 
     ... 
    } 
} 

public Class ClassBMap : ClassMap<ClassB>{ 
    public ClassBMap(){ 
     Id(x => x.Id); 
     References(x => x.ObjBC, "TableC_ID").Cascade.All(); 
     ... 
    } 
} 

public Class ClassCMap : ClassMap<ClassC>{ 
    public ClassCMap(){ 
     Id(x => x.Id); 
    } 
} 

ます。また、正しいテーブル名を推測されていることを確認することをお勧めします。問題は、マッピング元のテーブルの主キーに基づいて、HasOneがエンティティにマップされることです。

+0

私はそれを試してみます – karlipoppins

1

これは、HasOneを使用する場合、これは、テーブルが他のテーブルと同じプライマリキーを共有していることを意味します。あなたの場合、これは真実ではありません。クラスA、B、Cはそれぞれ独自のIDを持ちます。

http://jagregory.com/writings/i-think-you-mean-a-many-to-one-sir/

+0

+1いつかリンクを見たことがありましたが、それを失ってしまいました。ありがとう – karlipoppins

0

をあなたは「再おそらくReferencesの代わりHasOneを使用する必要が:これをより詳細に説明する次の資料をチェックしてください。 HasOneにはユニークなユースケースがあります。 HasOneReferencesに置き換えてください。私は信じられません。カスケード。すべて()も必要です。

ここでは、HasOneの使用方法を確認できます:http://wiki.fluentnhibernate.org/Fluent_mapping

関連する問題