【问题标题】:Is there something like a "long running offline transaction" for NHibernate or any other ORM?NHibernate 或任何其他 ORM 是否有类似“长时间运行的离线事务”的东西?
【发布时间】:2011-01-28 08:12:25
【问题描述】:

本质上,这是this question 的后续行动。我开始觉得我应该放弃整个想法,但我会再试一次。

我想要的很像一个数据库事务。它应该跟踪我对数据库的更改,然后最终允许我提交或回滚它们。如果我插入一个对象,我应该在下一个(适当的)SELECT 查询中取回它。如果我删除它,未来的 SELECT 查询不应该返回它。等等。

但有一个问题 - 此事务将运行很长时间。它会在用户打开表单时启动(我在这里谈论的是 Windows 表单),提交/回滚将在用户关闭它时启动(使用 OK/Cancel)。所以它可能需要几秒钟到几天之间的任何时间。此要求排除了标准数据库事务,因为这将锁定它所触及的表/行,并且其他用户将无法使用系统。此外,事务在真正提交之前不应向数据库提交任何更改。因此,如果一个用户进行了一些更改,其他人在点击 OK 按钮之前不会看到它们。这样可以防止计算机崩溃或与网络断开连接时出现错误。

如果解决方案对我的模型施加了限制,我很好(顺便说一句,我使用的是 MSSQL 2008)。我可以以任何我喜欢的方式设计数据库/代码。我也同意提交可能会失败,因为有人已经修改了我的事务触及的对象之一。

有这样的吗?我查看了 NHibernate.Burrow,但我不确定这就是我想要的。

补充:这是项目的开始,所以我不依赖于 NHibernate。我开始使用它,但我仍然可以轻松更改。

【问题讨论】:

    标签: nhibernate orm transactions offline


    【解决方案1】:

    据我判断,DataObjects.Net正是通过 DisconnectedState 支持这个概念。该功能非常新(几周前发布),其初步文档为hereWPF sample for DataObjects.Net 将其用于 UI 事务。

    我不确定那里是否提到了它,但是 DisconnectedState 以及它的 OperationLog 可以被序列化。因此,即使应用程序重新启动,它的缓存状态也可以保留。

    【讨论】:

    • 不错。我会用它,除了这是我业余时间做的一个小型商业程序,所以我都不愿意用它去 GPL,而且我没有足够的钱购买它。 :( 但是很棒的发现!我一定会牢记这一点!
    • 另一个限制是,插入到 DisconnectedState 中且未保存到数据库的实体可以通过对数据库的查询来选择,但按键获取查询除外。但我可以说这是基本的限制,很难弄清楚这样的查询应该如何工作。
    • Err... 你的意思是“不能被选中”?
    【解决方案2】:

    我认为没有人会在 NHibernate 核心中实现这一点,因为没有人会使用它。 Viewmodel 与域模型不同。

    【讨论】:

    • 不管它是在 NHibernate 中、在它之上还是与它完全无关。只是现在我正在使用 NHibernate,但这是项目的开始,所以我仍然可以根据需要进行更改。
    【解决方案3】:

    这不是对您问题的直接回答,但这是 WWF(一定会喜欢这个名字)打算解决的问题(至少在 v 3.5 之前它没有这样做)。

    【讨论】:

      【解决方案4】:

      如果您仍在关注此内容,Ayende Rahien 在 MSDN 杂志 http://msdn.microsoft.com/en-us/magazine/ee819139.aspx 上发表了一篇关于按表单/演示者方法进行会话的文章。另请查看 NHibernate 书籍 http://manning.com/kuate/ 的第 5 章(提供示例章节),关于事务和对话的一章。

      只要您延迟刷新/事务直到按下 ok 按钮,它应该可以工作(取决于刷新模式)。但是完全隔离是一个困难的问题,因为在处理多个实体时,您的会话将能够访问其他会话已提交的数据。您将不得不考虑处理此类问题。

      顺便说一句,如果您不使用 NHibernate,您将如何处理这种情况?

      【讨论】:

      • 有趣的文章,我稍后再看。如果我不使用 NHibernate,我可能会自己跟踪更改,然后在按下“确定”按钮时将所有更改一次写入事务中。不过,我不知道如何处理 SELECT 问题。
      【解决方案5】:

      EclipseLink 对这种野兽的支持有限。他们称之为“符合”,并在“工作单元”上下文中实现了它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-24
        • 1970-01-01
        • 2016-12-04
        • 1970-01-01
        • 2010-10-22
        • 2017-12-08
        • 2016-01-16
        相关资源
        最近更新 更多