Fixation d'un objet déconnecté à un NHibernate session; les meilleures pratiques?

Mon référentiel travaille dans un UnitOfWork modèle; toutes les opérations, que ce soit de la récupération ou de la persistance, doit être effectuée dans le cadre d'un IDisposable UnitOfWork jeton objet, qui, derrière les scènes, c'est associé à un Session qui effectue le travail demandé. Ainsi, le motif de base est:

using (var uow = repo.BeginUnitOfWork())
{
   try
   {
      //DB operations here; all repo methods require passing in uow.
      ...
      repo.CommitUnitOfWork(uow);
   }
   catch(Exception)
   {
      repo.RollbackUnitOfWork(uow);
      throw;
   }
}

J'ai aussi mis en œuvre des méthodes de wrapper qui vous permettent de spécifier un lambda ou son délégué qui sera exécuté dans ce cadre, le soulagement de la nécessité de mettre en œuvre tous ces échafaudages à chaque fois.

Le problème, je vais avoir, c'est que l'utilisation de ce modèle, le code doit "savoir" ce que les besoins des utilisateurs, et désireux de charge à l'aide de NHUtil.Initialize() dans le UnitOfWork. Une fois le UOW est éliminé à la fin de l'utilisation de bloc, la Session associée avec toute PersistentBags est fermé, et donc ils ne peuvent pas être évaluées. Comme désireux de chargement tout à l'avant n'est pas toujours possible et le genre de défaites le but d'un chargement différé ORM, je me suis mise en œuvre d'un Attach() méthode.

Voici la question; En l'absence d'un haut- ISession.Attach() méthode, il existe trois méthodes que j'ai vu recommandé d'associer un objet à une nouvelle Session. Lequel d'entre eux est la meilleure pratique pour faire le travail?

Un:

if(!Session.Contains(domainObject))
    Session.Update(domainObject);

B:

Session.Merge(domainObject);

C:

Session.Lock(domainObject, LockMode.None);
InformationsquelleAutor KeithS | 2010-12-14