从列表中删除对象时,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。
我的 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。