NHibernate集合映射:它是删除和插入而不是更新

时间:2011-04-01 11:24:02

标签: nhibernate insert mapping bag

我不确定如何映射集合以进行更新。 我有2张桌子:

  • 对象 - 具有3个整数的复合PK
  • ObjectAliases - 具有FK到Object和名称的nvarchar PK,显然名称是唯一的

对象可以有多个别名,但别名对每个对象都是唯一的。

所以我需要在对象中列出别名,所以我做了:

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,所以UPDATE CASCADE在所有FK上执行,引用新名称。

如果我这样做:

object.Aliases[0] = "test";

Nhibernate将尝试执行INSERT而不是UPDATE ..如何让它进行更新?

谢谢大家。

1 个答案:

答案 0 :(得分:1)

行李是无序和无索引的集合(来自http://www.nhforge.org/doc/nh/en/index.html#collections-mapping)。所以我猜这是因为nhibernates删除了一个重新创建其内容的事实。