从列表中删除对象时,NHibernate 不更新索引列

NHibernate does not update Index-column when removing an object from a list

我的 class A 有一个 属性:

public virtual IList<IVisitor> Visitors { get; set; }

映射如下:

<list name="Visitors" table="Visitor" cascade="all-delete-orphan">
  <key column="SomeID" not-null="true" update="false" />
  <index column="idx" />
  <one-to-many class="Visitor" />
</list>

当列表中有 3 个对象时,它们的 idx 为 0、1 和 2。

现在,当我移除中间对象并保存我的 A 实例时:

a.Visitors.RemoveAt( 1 );
a.Save(); // calls session.SaveOrUpdate( a );

删除了相应的行,但其他两行保留其 idx 0 和 2。

为什么 NHibernate 不将其更新为 0 和 1?

谢谢。

索引未更新,因为您的映射要求它们不被更新。

从您的 key 映射中删除 update="false"。它也适用于 index。该索引被视为列表键的一部分。

如果您使用旧版本的 NHibernate,您可能还需要 old bug