appelant .SaveOrUpdateCopy()? Cela devrait fonctionner dans tous les cas, s'il y a une entité avec le même identifiant dans la session ou s'il n'y a pas d'entité du tout. C'est essentiellement la méthode catch-all, car elle convertit un objet transitoire en un objet persistant (Save), met à jour l'objet s'il existe (Update) ou même gère si l'entité est une copie d'un objet déjà existant (Copy) . A défaut, vous devrez peut-être identifier et .Evict() l'objet existant avant d'attacher (.Update()) votre "nouvel" objet. Cela devrait être assez facile à faire:
IPersistable entity = Whatever(); // This is the object we're trying to update
// (IPersistable has an id field)
session.Evict(session.Get(entity.GetType(), entity.Id));
session.SaveOrUpdate(entity);
Bien que le code ci-dessus pourrait probablement faire avec nulle vérification de l'appel .get().