将对象链接到休眠会话



有人能帮我吗?我有一种休眠的情况,我从视图中检索对象,并进行手动映射将其转换为对象,然后尝试将该对象附加回会话。为此,我使用锁。它工作得很好,但在某些情况下,我检索了两次对象,锁定发生了两次,并给出了相同密钥已经在会话中的错误。是否有其他方法将对象附加到会话?注意:我的代码使用的是nhibernate v1,因为它已经很旧了。

NHibernate会话必须确保数据库中的唯一行在其内部是唯一的,这意味着

  1. 如果在两个变量中有相同类的相同对象,并使用object。ReferenceEquals,然后返回true,另请参阅https://learn.microsoft.com/en-us/dotnet/api/system.object.referenceequals?view=net-6.0.如果您不确定Equals VS ReferenceEquals,则应查找引用类型与值类型
  2. 优化(如果可能的话,也就是避免(访问数据库,这意味着如果可能,它将通过内存中的键来查找对象

因此,您100%坚持每个键/会话/类组合有一个对象。您必须更改从视图加载/转换数据的代码。你必须用给定的键查找已经在内存中的对象,并从内存中返回该对象,而不是创建一个新对象,如果你已经找到了的话。你必须在两个选项之间决定如何处理视图中的新数据:

  • 丢弃它!你的内存中已经有了这些数据。(我更喜欢这样。(
  • 更新内存中的对象,映射到对象而不是新对象中。(请注意,这将"覆盖"所有已经在内存中进行但尚未提交到数据库的更改,而使用NHibernate,您永远无法确定是否存在。(

如何在NHibernate会话中通过对象的类和键来查找对象。。。我不知道从记忆中,但我相信你会很快发现。

问候

Juy Juka

相关内容

  • 没有找到相关文章

最新更新