私はもともとMSSQL(2008)でNhibernateを使用していて、すべてがうまく機能しました。私は要求ごとにセッションをバインドし、トランザクション内のすべての作業単位をラップするWebアプリケーションを持っていました。トランザクションはAOPとカスタム属性を介して注入されたので、必要な属性を持つものはすべて、コミットまたはロールバックで終了したトランザクションにラップされます。mssqlからmysqlに移動するときのNhibernateトランザクションの問題
また、MSSQLですべて正常に動作していて、Nhibernate Profilerを使用すると、すべてのトランザクションが期待どおりに実行されていることがわかります。
私はMysqlデータベースを使用するようにMysql(5.1)のサポートを追加しました。すべてのテーブルがInnoDBとして設定されています。テーブル構造はすべて同じですから、理由はわかりません私は次のエラーを取得する:
NHibernateのプロファイラで確認するRow was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [SomeRandomEntity#1]Could not synchronize database state with session
、それは、実際にそれがその時点でコミットしなければならないのに対し、エラーで出爆撃更新コールを発射、トランザクションを開始しています。
それが更新中で焼成された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 */
それはまた、私は私の取引上の任意の分離レベルを使用していないことは注目に値する、私は必ず1が希望波平私のセットアップに最適であり、Mssqlはそれを設定しなかったときに不平を言うことはありませんでした。それはここに役立ちますINCASE
は、それが現時点でのショーストッパーであるとして前に、このような問題を見て誰もが、:(
===編集===
を持って私の接続文字列です:
<connectionStrings>
<add name="NHibernateConnection" connectionString="Server=localhost;Database=xxxxx;Uid=root;" providerName="System.Data.SqlClient"/>
</connectionStrings>