当我锁定一个被反序列化的对象时,我遇到了一个问题。
e.g:
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与打开的会话中的SessionId相同。
如果我锁定原始&#34;项目&#34;那就行了。
现在我的问题是如何与序列化/反序列化进行交互?
提前致谢和最好的问候
答案 0 :(得分:1)
NHibernate正在跟踪T
的一个实例...您正在尝试使用另一个T
实例(由Deserialize
返回的实例)。您必须session.Merge
反序列化的对象(并注意session.Merge
返回您必须使用的另一个对象!)
例如:
deserializedObject = session.Merge(deserializedObject);
从现在开始,deserializedObject
是NHibernate正在跟踪的对象。
请记住分配session.Merge的结果!
下一行完全没用,是一个常见错误!
session.Merge(deserializedObject);