2017-01-23 6 views
0

Два NHibernate сессии уже созданы, я создаю новый объект модели и сохранить его с Id в session1, то я использую Merge метод из session2 совершать свои изменения ,Передача объекта из одной NHibernate сессии два другой сессия

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

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

// and finally 
session1.Commit(); 

И в результате я думаю, это неожиданно! путем запуска кода выше NHibernate будет вставлять записей с разными идентификаторами.

ответ

2

Интересно, связано ли это с тем, что объект в session2 является временным, когда он добавлен? Это не должно быть потому, что вы назначаете ключ в вызове Save(), однако поведение, которое вы наблюдаете, соответствует этой ситуации.

Если вы измените код на:

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

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

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

Что такое эффект?

+0

Это может сработать, но я хочу отключить переходный объект в 'session1' и прикрепить его в' session2'. –

+1

Detach = 'Evict()'. После сохранения и/или фиксации объект не будет преходящим, хотя. –

+0

Хороший пример. +1 –

Смежные вопросы