2017-01-23 7 views
0

Deux NHibernate sessions sont déjà créés, créer un nouvel objet de modèle et enregistrez-le avec un Id dans session1, puis-je utiliser la méthode Merge de session2 pour commettre ses changements .transférer un objet d'une session NHibernate deux autres session

// session1, NHibernate 
var obj1 = new FooModel(); 
session1.Save(obj1, Guid.NewId()); 

// session2, NHibernte 
session2.Merge(obj1); 
session2.Commit(); 

// and finally 
session1.Commit(); 

et le résultat que je pense est un peu inattendu! en exécutant le code ci-dessus NHibernate insérera enregistrements avec des ID différents.

Répondre

2

Je me demande si c'est parce que l'objet dans session2 est transitoire quand il est ajouté? Cela ne devrait pas être parce que vous attribuez la clé dans l'appel à Save(), mais le comportement que vous observez correspond à cette situation.

Si vous modifiez le code:

// session1, NHibernate 
var obj1 = new FooModel(); 

session1.Save(obj1, Guid.NewId()); 
session1.Commit(); 

// session2, NHibernte 
session2.Merge(obj1); 
session2.Commit(); 

Quel est l'effet?

+0

Cela peut fonctionner, mais je veux détacher un objet transitoire dans 'session1' et l'attacher dans' session2'. –

+1

Détacher = 'Evict() '. Une fois sauvegardé et/ou validé, l'objet ne sera plus transitoire. –

+0

Bon exemple. +1 –