2009-04-22 13 views
0

私は多くのOrderItemを持つOrderマッピングを持っています。マッピングは、Orderだけで保存すると、OrderとOrderItemの両方をデータベースに正しく保存しますが、その順序をリロードすると、そのOrderが含むOrderItemのリストはnull値で埋められます( Orderの外部キーを持つOrderItemに達するまで)。したがって、ヌルオーダー項目の合計数はOrderItems表の行数です(Orderに関連する実際のオーダー項目は除外されます)。ここに私のマッピングです:nHibernate Nullリストの値が1対多で

注文:

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

のOrderItem:

<many-to-one name="Order" class="Order" column="OrderID" not-null="true" /> 

はここで注文のクラスの実装です:

public class Order : { 
    private IList<OrderItem> orderItems = new List<OrderItem>(); 

私のようにNHibernateは、リストをサポートしていないことを読みます関係の多くの部分が、セーブは正しく動作し、負荷ではありません。これを機能させるには、すべてをセットに変換する必要がありますか?

答えて

1

私は

<list> 

と.NETのIListインターフェイスにマッピングする代わりに

<bag> 

に頼っで問題が発生して覚えている私の頭の上のジャスト。それがあなたの問題を解決するかどうかは分かりません。役に立つかもしれ何

がconsole.outするログを有効にすることで、データベースに当たっている実際のSQLは、あなたが期待するものと異なっているかを見ることである( see this blog

+0

バッグに変更し、それは素晴らしい仕事! – Josh

0

は、これが原因ではない、あなたのOrderItemsコレクション理由怠惰に読み込まれていますか? リスト(またはバッグ)マッピングでlazy = falseを指定すると、これはもう大文字小文字にはなりません。

オフコースの質問は、OrderItemsを怠ってロードするかどうかですか? :)

関連する問題