2017-04-24 1 views
1

Ma classe A a une propriété:NHibernate ne met pas à jour colonne Index lors de la suppression d'un objet à partir d'une liste

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

qui est mis en correspondance comme suit:

<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> 

Quand il y a 3 objets la liste, ils ont le IDX 0, 1 et 2.

maintenant, quand je supprimer l'objet du milieu et sauver mon exemple de A comme:

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

la ligne appropriée est supprimée, mais les deux autres lignes à garder son IDX 0 et 2.

Pourquoi ne pas mettre à jour NHibernate à 0 et 1?

Merci.

Répondre

1

Les index ne sont pas mis à jour car votre mappage leur impose de ne pas être mis à jour.

Supprimez update="false" de votre mappage key. Il s'applique également à index. L'index est considéré comme faisant partie de la clé de liste. Si vous utilisez une ancienne version de NHibernate, vous pouvez également avoir cette old bug.

+0

Cela semble fonctionner, merci! Je viens de copier la mise à jour = "false" d'une autre liste où j'en avais besoin, j'ai oublié pourquoi. Tous les tests sont verts, donc cela pourrait n'avoir aucun impact. – Powerslave

+1

Peut-être à cause de [ceci] (/ a/11576097/1178314). –