2009-07-31 5 views
0

nHibernateがサポートしているかどうかわからないデータモデルがあります。もし誰かがそれをするかどうか、もしそうなら、どうすればいいのか疑問に思っていました。基本的な構造は次のとおりです。一言で言えばそう明示的なFKを持たないnHibernate "HasMany"

create table Container (
    id int identity(1,1) NOT NULL, 
    root_item_id int 
) 

create table ItemRelationship (
    id int identity(1, 1) NOT NULL, 
    parent_item_id INT, 
    child_item_id INT 
) 

create table Item (
    id int identity(1, 1) NOT NULL, 
    description VARCHAR(20) 
) 

: 1)コンテナは、ルート項目 2を持っている)のアイテムは、私が欲しい子供用アイテム

を持つことができる私の「コンテナ」エンティティのプロパティですそれはルート項目の子要素である項目のコレクションです。私はどのように設定「直接」FKの関係を見ることができますが、関係のチェーンがあるとして、この1つは、少し珍しいです:

Container.root_item_id - > ItemRelationship.parent_item_id

はありませんが、明示的なFK。私は、どこかの方法で "Where"メソッドを使用しなければならないと仮定していますが、どのようにしてサンプルを見つけることができなかったのか分かりません。何か案は?

答えて

0

あなたの問題は比較的簡単な利便性で解決できると思います。

アイテム間の多対多関係(ItemRelationshipテーブルで管理されています)があります。したがって、デフォルトでは、ChildItemsのプロパティを持つItemクラスを定義することができるはずです(このクラスのClassMapにはHasManyToMany()呼び出しがあります)。あなたのContainerクラスはItem型のRoot_Itemプロパティを持っています(これは前述したようにChildItemsリストを持っています)。次に、そのRoot_itemのChildItemを返すコンテナのコンビニエンスプロパティを作成できます。例:

public class Container 
{ 
    public virtual Item Root_Item { get; set; } 

    public List<Item> ChildItems 
    { 
     get { 
      if (Root_Item != null) 
       return Root_Item.ChildItems; 
      return new List<Item>(); // or null depending on how you want to handle this 
     } 
    } 
} 
+0

それは私に必要なものを与えました!ありがとう! – Marty

関連する問題