2009-04-17 10 views
1

OrderItemを含むOrderクラスがあります。 Orderクラスを保管すると、データベースにOrder情報が移入されますが、子OrderItemのいずれもそれぞれの表に保管されません。ここでは注文のマッピングは次のようになります。NHibernateはオブジェクトのコレクションを保存しません

if (o.CreatedBy == null || o.CreatedBy == string.Empty) { 
     o.CreatedBy = userID.ToString(); 
     foreach (OrderItem oi in obj.OrderItems) { 
      oi.CreatedBy = userID.ToString(); 
      oi.ModifiedBy = userID.ToString(); 
      oi.ModifiedOn = DateTime.Now; 
     } 
} 
o.ModifiedBy = userID.ToString(); 
o.ModifiedOn = DateTime.Now; 
ISession session = NHibernateHelper.GetCurrentSession(); 
ITransaction tx = session.BeginTransaction(); 
session.Save(o); 
tx.Commit(); 
NHibernateHelper.CloseSession(); 
:ここで注文を保存するためのコードは次のようになります。

<class name="OrderItem" table="OrderItems"> 
<id name="OrderItemID" column="OrderItemID" type="Int64" unsaved-value="0"> 
    <generator class="identity"/> 
</id> 
<property name="OrderID" /> 
<many-to-one name="Order" class="Order" column="OrderID" not-null="true" /> 
</class> 

<class name="Order" table="Orders"> 
<id name="OrderID" column="OrderID" type="Int64" unsaved-value="0"> 
    <generator class="identity"/> 
</id> 
<list name="OrderItems" table="OrderItems" inverse="true" > 
    <key column="OrderID"/> 
    <index column="OrderItemID" /> 
    <one-to-many class="OrderItem" /> 
</list> 

は、ここでのOrderItemのマッピングは次のようになります。

子OrderItemsが保存されていない理由は何ですか?

+0

あなたが少しを投稿できる: - 上記の例あなたは新しい秩序保存にしようとしているが、あなたは個別にOrderItem.Orderプロパティを更新し、アイテムの更新()の呼び出しを発行する必要がありますあなたのオブジェクトがどのようにクリエイティブであるかを示すコード関係は確立され、その後救われましたか?あなたのマッピングはうまくいくので、私の推測では、コードに関連していると思います。 –

答えて

7

updateコマンドは、ご注文のすべての子に伝播するようにするには、あなたのコレクション・マッピングに更新をカスケード有効にする必要があります

using(ITransaction tx = session.BeginTransaction()){ 
    session.Save(o); 
    foreach(var item in o.OrderItems){ 
     item.Order = o; 
     session.SaveOrUpdate(item); 
    } 
    tx.Commit(); 
} 
+0

私が間違っていれば私を修正してください。 NHibernateでは、セットとバッグのみが双方向の関係をサポートしますが、リストはサポートしません。 –

+0

OrderItem内でを宣言しました。それは必要ですか? –

5

コレクションマッピングにcascade="all"を追加します。コレクションは「逆」としてマークされているので、

<list name="OrderItems" table="OrderItems" inverse="true" cascade="all"> 
    <key column="OrderID"/> 
    <index column="OrderItemID" /> 
    <one-to-many class="OrderItem" /> 
</list> 

さらに - に:

関連する問題