1

コレクションをマップして更新する方法がわかりません。私は2つのテーブルを持っています:

  • オブジェクト-3intの複合PKがあります
  • ObjectAliases-ObjectへのFKとNameへのnvarcharPKがあり、明らかにnameは一意です

オブジェクトには多くのエイリアスを含めることができますが、エイリアス名はオブジェクトごとに一意です。

したがって、オブジェクトにエイリアスをリストする必要があるので、次のようにしました。

public virtual IList<string> Aliases { get; set; }

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

<bag name="Aliases" table="Aliases" cascade="all-delete-orphan" lazy="true">
  <key>
    <column name="OtpadId_Djelatnost" sql-type="nvarchar"/>
    <column name="OtpadId_Proces" sql-type="nvarchar"/>
    <column name="OtpadId_Vrsta" sql-type="nvarchar"/>
  </key>
  <element column="Ime" type="String"/>
</bag>

エイリアスリストからオブジェクトを問題なく作成および削除できます。Nhibernateは正常に挿入および削除します。しかし、どうすればエイリアスの名前を変更できますか?名前でエイリアスにFKがあり、エイリアスの名前を変更するときにNHibernateにsql UPDATEを実行させて、新しい名前を参照してすべてのFKでUPDATECASCADEを実行します。

私が行った場合:

object.Aliases[0] = "test";

NhibernateはUPDATEではなくINSERTを実行しようとします。どうすればUPDATEを実行できますか?

皆さん、ありがとうございました。

4

1 に答える 1

1

バッグは順序付けられておらず、インデックス付けされていないコレクションです(http://www.nhforge.org/doc/nh/en/index.html#collections-mappingから)。したがって、nhibernatesが削除し、そのコンテンツを再作成するのは、この事実から来ていると思います。

于 2011-04-01T12:01:31.467 に答える