工作单元的副作用可以通过TransactionScope修复,但MySql.Data无法修复
我将NHibernate与MySql.Data ADO连接器一起使用 我有带有CRUD方法的Dao类:创建、更新、删除 这些方法打开自己的NHibernate事务并提交它们 现在我将我的设计更改为使用工作单元模式。会话和事务将在上层打开和提交,而不是在Dao方法中。因此,我必须从Dao类中删除提交 我发现这种方法有几个问题: 我在提交点捕获特定于数据库的异常。现在提交在上面的一层中完成。所以我必须将所有特定于数据库层的代码添加到外层?例如捕获FK冲突或NH特定异常。 我将同时获得所有可能的异常,必须识别它们来自哪个具体的Dao类,并实现代码来处理它们。 如果其中一个步骤失败,我将无法中止操作,因为在完成最终提交之前,我不会知道它。我知道事务回滚将防止数据不一致,但仅仅因为我不知道前几行导致了错误,就运行以下所有代码似乎是一种性能浪费。 我不喜欢这种仪式。我希望我可以在事务作用域中使用嵌套事务,这样我就可以在本地进行提交,但是看起来MySql.Data connector不支持它们。我试过了,但有例外: System.InvalidOperationException:嵌套事务不可用 支持 是否有任何变通方法可以让我在插入、更新或删除操作完成时立即获得可能的异常?我能帮你吗?或者有没有办法将TransactionScope用于MySql.Data 抱歉,如果这个问题看起来很幼稚,但我已经在谷歌上搜索了一段时间,没有找到任何明确的解决方案。关于事务范围不适用于MySql.Data,我得到的所有信息似乎都有点旧,我不确定现在是否真的不能完成。最后,我决定在任何时候使用嵌套事务提交时都使用Flush。它似乎工作正常,我在那一刻得到的例外,我能够处理他们当地 我知道NHibernate的最佳实践包括不要如此随意地使用Flush,但我没有找到更好的解决方案,因为MySql和NHibernate不提供嵌套事务,所以这似乎是较小的缺点工作单元的副作用可以通过TransactionScope修复,但MySql.Data无法修复,mysql,nhibernate,ado.net,transactionscope,unit-of-work,Mysql,Nhibernate,Ado.net,Transactionscope,Unit Of Work,我将NHibernate与MySql.Data ADO连接器一起使用 我有带有CRUD方法的Dao类:创建、更新、删除 这些方法打开自己的NHibernate事务并提交它们 现在我将我的设计更改为使用工作单元模式。会话和事务将在上层打开和提交,而不是在Dao方法中。因此,我必须从Dao类中删除提交 我发现这种方法有几个问题: 我在提交点捕获特定于数据库的异常。现在提交在上面的一层中完成。所以我必须将所有特定于数据库层的代码添加到外层?例如捕获FK冲突或NH特定异常。 我将同时获得所有可能的异常,