我最初使用Nhibernate和MSSQL(2008),一切都很好。我有一个网络应用程序,它根据请求绑定一个会话并包装一个事务中的每个工作单元。事务是通过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>
答案 0 :(得分:0)
似乎问题归结为一个没有插入其他地方的不稳定的列,这正在停止更新。虽然错误并不清楚底层问题是什么。