Nhibernate数据对象添加,删除,然后添加对象

时间:2012-03-06 09:02:47

标签: nhibernate

我正在使用(流利的)nhibernate,我遇到了一个小问题。我的数据模型是拥有一个用户对象,该对象具有到另一个对象的一对多链接(我将其称为Obj1)。 Obj1有一个主键,在我的应用程序外部。虽然我可以将其更改为拥有自己的主键,因此允许重复,但以后会导致更多问题。

用户可以随时在他们的个人资料中添加和删除Obj1,并在执行每个操作时立即调用数据层。问题是如果用户添加一个Obj1,删除它然后再添加它,那么nhibernate会给我一个NonUniqueObjectException。

这是因为添加的第一个Obj1似乎仍然在nhibernate会话中闲逛。似乎有几种解决方案:

  1. 清除会话并在发生更新时重新加载用户obj。
  2. 从这里开始:nhibernate : a different object with the same identifier value was already associated with the session: 2, of entity: - 每次更新后从会话缓存中逐出用户对象。
  3. 重新编写允许用户管理Obj1的屏幕,以便它在离开屏幕时仅调用数据层。
  4. 1和2更容易,但两者似乎都有点破解。 3似乎是“正确的”解决方案,但意味着我可能会在以后更难以解决的问题上遇到同样的问题。

    所以问题是,哪个最好,为什么?这些解决方案中的任何一个都因某种原因而变坏(例如,尝试对nhibernate缓存进行微观管理对我来说似乎是一个坏主意。)

    注意:奇怪的是,通过写这篇文章,我已经从完全不确定到相信3是最好的方式。我仍然有兴趣听到其他观点。

1 个答案:

答案 0 :(得分:0)

我在存储库上添加了一个单元测试来重现这个问题,令我惊讶的是,它运行正常。 几分钟后,我发现了真正的问题 - 我没有坚持将Obj1删除到数据层。一旦我这样做,一切正常。

噢,好吧,至少它为我节省了很多工作。