2011-07-21 1 views
0

J'utilisais initialement Nhibernate avec MSSQL (2008) et tout a bien fonctionné. J'avais une application web qui liait une session par requête et enveloppait chaque unité de travail dans une transaction. Les transactions ont été injectées via AOP et un attribut personnalisé, donc tout avec l'attribut requis serait enveloppé dans une transaction qui se terminait par une validation ou une annulation. Encore une fois, juste pour clarifier tout fonctionnait bien dans MSSQL et en utilisant Nhibernate Profiler je peux voir que toutes les transactions se produisent comme prévu. Maintenant que je viens d'ajouter le support pour Mysql (5.1) (comme un environnement utilise une base de données MySQL), j'ai configuré toutes les tables comme InnoDB et les structures de table sont identiques, donc je suis un peu déconcertée de savoir pourquoi Je reçois l'erreur suivante:Nhibernate transaction problème lors du passage à mysql de mssql

Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [SomeRandomEntity#1]Could not synchronize database state with session 

Vérification sur Nhibernate profileur, il commence une transaction, le tir d'un appel de mise à jour, puis le bombardement avec l'erreur, alors que vraiment il faut commettrait à ce moment-là.

Si elle aide le sql étant tiré dans la mise à jour est (nom changé):

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 */ 

Il est également intéressant de noter que je n'utilise pas de niveau d'isolement sur mes opérations, je n'étais pas sûr que l'on aurait être le mieux pour ma configuration et Mssql ne se plaignait pas quand je ne l'ai pas mis.

Quelqu'un at-il vu des problèmes comme ça avant, car il est un bouchon de spectacle au moment :(

=== === Modifier

Incase il aide ici est ma chaîne de connexion:

<connectionStrings> 
    <add name="NHibernateConnection" connectionString="Server=localhost;Database=xxxxx;Uid=root;" providerName="System.Data.SqlClient"/> 
    </connectionStrings> 

Répondre

0

Il semble que le problème était tombé à une colonne bancale qui n'a pas été insérait ailleurs, qui a été l'arrêt de la mise à jour. Bien que l'erreur n'a pas été très clair quant à ce que le problème sous-jacent était.

Questions connexes