2011-01-22 21 views
1

nhibernateを使用して子オブジェクトの親オブジェクトを参照することはできますか?今まで私がやってきたのは、親クラスを子クラスに入れて、実行時に子クラスの親が何であるかを判断できるようにすることです。nhibernateリファレンス子クラスの親クラス

誰かが、再帰問題に遭遇することなく、親のIDだけでなく、私の子供の親オブジェクト全体を参照できることを教えてくれました。

Child child = (Child)session.Get(typeof(Child), childId); 

その後、私はそうのような私PARENTIDのホールドを取得することができます:私は現在、やることはこれです

私が何をしたいのか

int parentId = child.ParentId; 

はこれです:

Child child = (Child)session.Get(typeof(Child), childId); 

int parentId = child.**Parent**.Id; 

string parentName = child.**Parent**.Name 

<class name="Parent" table="parents" lazy="false"> 
     <id name="Id"> 
      <generator class="identity" /> 
     </id> 
     <property name="Name" /> 
     <bag name="Children" cascade="all" lazy="false" > 
      <key column="ParentId" /> 
      <one-to-many class="Child"/> 
     </bag> 

     <!-- Do I put anything in here to refer to my parent object in my child object?--> 
    </class> 


    <class name="Child" table="Children" lazy="false"> 
     <id name="Id"> 
      <generator class="identity" /> 
     </id> 
     <property name="ParentId" /> 
     <property name="Name" /> 

     <!-- Do I put anything in here to refer to my parent object in my child object?--> 
    </class> 

すべてのヘルプは、感謝感謝:ここ


は、私は私のクラス

public class Parent 
{ 
public int Id { get; set; } 
public string Name { get; set; } 

// A list of child objects 
public IList<Child> Children { get; set; } 
} 

public class Child 
{ 
public int Id { get; set; } 
public string Name { get; set; } 
public int ParentId { get; set; } // this is what I use now 

// public Parent MyParent { get; set; } // this is what I want to use 
} 

マイNHibernateはマッピングファイル

を定義する方法の一例です!

答えて

2

これが可能であることを確認:

<!-- Set inverse to true on the one-to-many to tell 
    NHibernate this relation is mapped from both sides --> 
<bag name="Children" cascade="all" lazy="false" inverse="true"> 
    <key column="ParentId" /> 
    <one-to-many class="Child"/> 
</bag> 

<class name="Child" table="Children" lazy="false"> 
    <id name="Id"> 
     <generator class="identity" /> 
    </id> 
    <property name="ParentId" /> 
    <!-- Use this to map the Parent object --> 
    <many-to-one name="MyParent" class="Parent" column="ParentId"/> 
<property name="Name" /> 
    </class> 
+1

あなたは通常、 '' 参照に加えて、プロパティとしてParentIdはを指定する必要はありません注意することは。それはMyParent.Idを介して参照できるためです。 – Vadim

+0

これはオプションです。しかし、プロパティがクラス内にある限り、私はそれをマッピングすることを強く勧めます。 – zoidbeck

+0

天才!それは素晴らしいゾイドベックです、ありがとう! – adrianos

関連する問題