【发布时间】:2011-07-21 10:29:56
【问题描述】:
我最初使用 Nhibernate 和 MSSQL (2008),一切都很好。我有一个 Web 应用程序,它为每个请求绑定一个会话,并将每个工作单元包装在一个事务中。事务是通过 AOP 和自定义属性注入的,因此具有所需属性的所有内容都将包装在以提交或回滚结束的事务中。
再次澄清在 MSSQL 中一切正常,使用 Nhibernate Profiler 我可以看到所有事务都按预期发生。
现在我刚刚添加了对 Mysql (5.1) 的支持(因为一个环境使用 Mysql 数据库),我已将所有表设置为 InnoDB 并且表结构都相同,所以我有点困惑为什么我得到以下错误:
Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [SomeRandomEntity#1]Could not synchronize database state with session
检查 Nhibernate 分析器,它正在开始一个事务,触发一个更新调用,然后抛出错误,而实际上它应该在那个时候提交。
如果它有助于更新中触发的 sql 是(名称已更改):
UPDATE
some_table SET some_column_1 = 1230697028 /* ?p0 */,
some_column_2 = '2011-07-21T10:58:59.00' /* ?p1 */
WHERE some_column_3 = 1 /* ?p2 */
还值得注意的是,我没有在我的事务中使用任何隔离级别,我不确定哪个最适合我的设置,并且当我没有设置时,Mssql 没有抱怨。
以前有没有人见过这样的问题,因为它现在是一个表演障碍:(
=== 编辑 ===
如果有帮助,这里是我的连接字符串:
<connectionStrings>
<add name="NHibernateConnection" connectionString="Server=localhost;Database=xxxxx;Uid=root;" providerName="System.Data.SqlClient"/>
</connectionStrings>
【问题讨论】:
标签: mysql nhibernate transactions