2009-07-13 21 views
1

新しい子を追加しようとすると問題を引き起こす3つのクラスがあります。NHibernateと複合コレクションを持つ新しいアイテムを子コレクションに追加する

彼らは次のとおりです。

User { 
     List attributesGroup> 
} 

AttributesGroup { 
    attributesGroupId 
    value 
} 

AttributesGroupId { 
    attrName 
    userId 
} 

マッピングは次のとおりです。

<class name="AlternativeUserAttributes" table="`AlternativeUserAttributes`" lazy="true"> 
    <composite-id name="Id" class="Data.Entities.AlternativeUserAttributesId"> 
     <key-property name="AttributeName" column="`attributeName`" type="string" /> 
     <key-many-to-one name="User" class="Entities.User" column="`userId`" /> 
    </composite-id> 
    <property name="AttributeValue" column="`attributeValue`" type="string" /> 
    <many-to-one name="User" column="`userId`" cascade="none" not-null="true" /> 
    </class> 

私はに項目を追加する をしようとすると、私はしかし、問題なくユーザークラス上の項目とクラスSaveUpdateを削除することができますコレクション:

AlternativeUserAttributes aua = new AlternativeUserAttributes(); 
      aua.Id = new AlternativeUserAttributesId(); 
      aua.Id.AttributeName = name; 
      aua.Id.User = curUser; 
      aua.AttributeValue = value; 
      aua.User = curUser; 

     curUser.AlternativeUserAttributes.Add(aua); 

ローカウントがeであるというエラーが表示されます1と予想されていたが0だったので、Saveを使用してAlternateUserAttributesのみを自己として保存しようとすると、このエラーが発生します。 インデックスが範囲外です。負でなく、コレクションのサイズより小さくなければなりません。 パラメータ名:index

両方の試行で新しい項目のINSERTが行われていますが、これらのエラーが発生しています。助けることができる人はいますか?

+0

保存されていない値を設定すると、エラーが返されます。 System.ArgumentOutOfRangeException:インデックスが範囲外です。負でなく、コレクションのサイズより小さくなければなりません。 – monksy

答えて

1

これを解決するには、保存されていない値をanyに設定して双方向性を取り除いてください。

1

私は(あなたの投稿をマングルして)苦労していますが、コンポジットIDを使用するとこの問題が発生する可能性があります。 IDの型は '割り当てられている'ため、NHibernateは、オブジェクトが一時的なものか永続的なものかを判断する方法を知らない。

https://www.hibernate.org/hib_docs/nhibernate/1.2/reference/en/html/example-parentchild.html

詳細については、セクション17.4に移動します。

解決策の1つは、バージョンまたはタイムスタンプフィールドを使用することです。永続性を追跡し、インターセプタを使用する基本クラスを実装しました。

は、私がここにコードを投稿:あなたが挿入を取得している場合は、言っ

How to save a child with assigned id in nhibernateが、私は、これは同じ問題である100%わかりません。