NHibernate - 锁定反序列化对象

时间:2017-03-17 15:14:27

标签: serialization nhibernate deserialization

当我锁定一个被反序列化的对象时,我遇到了一个问题。

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;那就行了。

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

提前致谢和最好的问候

1 个答案:

答案 0 :(得分:1)

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

例如:

deserializedObject = session.Merge(deserializedObject);

从现在开始,deserializedObject是NHibernate正在跟踪的对象。

请记住分配session.Merge的结果

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

session.Merge(deserializedObject);