Quelle est la meilleure façon d'actualiser les entités dans nhibernate
Je voudrais d'actualisation d'une entité et de toutes ses collections. Quelle est la meilleure façon de le faire? Je parle de nhibernate:)
J'ai lu à propos de la session.Expulser, de la session.Actualiser...
Mais je ne sais pas encore si je faisais comme:
RefreshEntity<T>(T entity)
{
session.Evict(entity);
session.Refresh(entity);
}
fonctionnerait exactement comment je veux qu'il fonctionne
Est-ce que ça va fonctionner? Si non Ce que je peux faire?
source d'informationauteur Katalonis
Vous devez vous connecter pour publier un commentaire.
D'actualisation après Expulser probablement ne fonctionne pas.
Théoriquement
Refresh
seul devrait suffire. Cependant, il a connu des problèmes quand des éléments de l'enfant collections ont été supprimés.Evict
suivie parGet
généralement fait bouger les choses.D'actualisation(parentObject) serait une bonne option, mais pour moi, il est d'abord récupéré tous les enfants un par un single avec les demandes. Pas de dosage, pas de sous-requête, aucune jointure. Très mauvais!
Il a contribué à l' .Clear() l'enfant de la collection de l'objet parent; j'ai également expulsées de l'enfant des objets avant.
(il avait été changé par un HQL mise à jour avant de où plusieurs insertions par le parent/enfants SaveOrUpdate causerait cher index cluster reconstruit).
EDIT: j'ai enlevé le HQL mise à jour, depuis la requête (décrémentation de l'indice par un unique, un grand nombre) était plus cher que des centaines de simples mises à jour de lignes dans un lot. Je me suis donc retrouvé dans un simple SaveOrUpdate(parentObject), sans avoir besoin de rafraîchir.
La raison en était un enfant de la collection avec la contrainte unique sur ParentID et Index (numéro d'ordre), ce qui aurait pour résultat d'unicité de violations pendant la mise à jour a changé les enfants. De sorte que l'indice a d'abord été incrémenté par 1000000 (ou l'arbitraire d'un nombre élevé) pour tous les enfants, puis, après modifications, décrémenté de nouveau.