2017-03-17 15 views
0

我有一個問題,當我鎖定一個對象反序列化。NHibernate的 - 鎖反序列化的對象

例如爲:

var session = sessionFactory.OpenSession(); 
var item = session.QueryOver<T>().Where(x => x.Id = "1").FutureValue().Value; 

var serializedObject = Serializer.Serialize(item); 

//do something with the serialized object 
//... 

var deserializedObject = Deserializer.Deserialze(serializedObject); 
//lock record 
session.Lock(deserializedObject, lockMode); 

錯誤:

a different with the same identifier value was already associated with the session... 

但在的SessionID從打開的會話的錯誤IST相同的SessionID。

如果我鎖定原來的「項目」,那麼它的作品。

現在是我的問題我該如何與序列化/反序列化交互?

預先感謝UND最誠摯的問候

+1

NHibernate跟蹤你的T的一個實例...你試圖使用T的另一個實例('Deserialize'返回的那個實例)。你必須'session.Merge'反序列化的對象(並注意'session.Merge'返回另一個對象!附加到'session'的對象)。 – xanatos

+0

你好xanatos,請你解釋一下。現在我嘗試session.Merge(deserializedObject);但錯誤是一樣的:( –

+0

'deserializedObject = session.Merge(deserializedObject)' – xanatos

回答

1

NHibernate的是跟蹤你的T的只有一個實例...你要使用的T另一個實例(一個由Deserialize返回)。你必須session.Merge反序列化對象(請注意,session.Merge返回另一個對象,則必須使用!)

例如:

deserializedObject = session.Merge(deserializedObject); 

從這點上來說,該deserializedObject是對象NHibernate的被跟蹤。

記得分配session.Merge的結果!

下一行完全沒用,是一個常見錯誤!

session.Merge(deserializedObject);