NHibernate - 锁定反序列化对象

问题描述 投票:0回答:1

当我锁定反序列化的对象时遇到问题。

例如:

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相同。

如果我锁定原来的“项目”,那么它就可以工作。

现在我的问题是如何与序列化/反序列化交互?

提前致谢并致以诚挚的问候

serialization nhibernate deserialization
1个回答
1
投票

NHibernate 正在跟踪您的

T
的一个实例...您正在尝试使用
T
的另一个实例(由
Deserialize
返回的实例)。您必须
session.Merge
反序列化对象(并注意
session.Merge
返回您必须使用的另一个对象!)

例如:

deserializedObject = session.Merge(deserializedObject);

从这一点开始,

deserializedObject
就是NHibernate正在跟踪的对象。

记得赋值session.Merge的结果

下一行完全没用,是一个常见错误!

session.Merge(deserializedObject);
© www.soinside.com 2019 - 2024. All rights reserved.