本质上,这是对这个问题的跟进。我开始觉得我应该放弃整个想法,但我会再试一次。
我想要的很像一个数据库事务。它应该跟踪我对数据库的更改,然后最终允许我提交或回滚它们。如果我插入一个对象,我应该在下一个(适当的)SELECT 查询中取回它。如果我删除它,未来的 SELECT 查询不应该返回它。等等。
但是有一个问题 - 这笔交易将运行很长时间。它会在用户打开表单时启动(我在这里谈论的是 Windows 表单),而提交/回滚将在用户关闭它时启动(使用 OK/Cancel)。所以它可能需要几秒钟到几天之间的任何时间。此要求排除了标准数据库事务,因为这将锁定它所触及的表/行,并且其他用户将无法使用系统。此外,事务在真正提交之前不应向数据库提交任何更改。因此,如果一个用户进行了一些更改,其他人在点击 OK 按钮之前不会看到它们。这可以防止计算机崩溃或与网络断开连接时出现错误。
如果解决方案对我的模型施加了限制,我很好(我使用的是 MSSQL 2008,顺便说一句)。我可以以任何我喜欢的方式设计数据库/代码。我也同意提交可能会失败的想法,因为有人已经修改了我的事务触及的对象之一。
有这样的吗?我查看了 NHibernate.Burrow,但我不确定那是我想要的。
补充:这是项目的开始,所以我不依赖于 NHibernate。我开始使用它,但我仍然可以轻松更改。