当我锁定反序列化的对象时遇到问题。
例如:
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);
错误:
具有相同标识符值的不同值已与会话关联...
但是错误中的SessionId与打开的会话中的SessionId相同。
如果我锁定原来的“项目”,那么它就可以工作。
现在我的问题是如何与序列化/反序列化交互?
提前致谢并致以诚挚的问候
NHibernate 正在跟踪您的
T
的一个实例...您正在尝试使用 T
的另一个实例(由 Deserialize
返回的实例)。您必须 session.Merge
反序列化对象(并注意 session.Merge
返回您必须使用的另一个对象!)
例如:
deserializedObject = session.Merge(deserializedObject);
从这一点开始,
deserializedObject
就是NHibernate正在跟踪的对象。
记得赋值session.Merge的结果!
下一行完全没用,是一个常见错误!
session.Merge(deserializedObject);