Dapper.net Transaktionsproblem

asp.net dapper orm sql-server-2008

Frage

Ich versuche, eine Transaktion zu meiner Sql Server 2008-Datenbank zu verpflichten - zunächst 2 Einfügungen gefolgt von ein paar Updates, aber sobald es versucht, die erste der Updates auszuführen, erhalte ich den folgenden Fehler:

ExecuteNonQuery erfordert, dass der Befehl eine Transaktion ausführt, wenn sich die dem Befehl zugewiesene Verbindung in einer ausstehenden lokalen Transaktion befindet. Die Transaction-Eigenschaft des Befehls wurde nicht initialisiert.

Hier ist der Code, der der Kürze wegen kurz geschnitten wurde:

using (_cn)
{
    _cn.Open();
    IDbTransaction transaction = _cn.BeginTransaction();
    topicId = (int)_cn.Query<decimal>(qAddTopic, new { pForumId = topic.ForumId }, transaction).Single();
    postId = (int)_cn.Query<decimal>(qAddPost, new { pTopicId = topicId }, transaction).Single();

    _cn.Execute(qUpdateForums, new { pLastPostId = postId });
    _cn.Execute((qUpdateSiteTotals));

    transaction.Commit();
}

Die ersten 2 Einfügungen funktionieren gut, aber sobald es versucht, eines der Updates durchzuführen, keine Freude.

Akzeptierte Antwort

Ich habe das Problem gefunden - ich habe einfach den Transaktions-Parameter vermisst, als ich die Updates anrief, während ich mit den vorherigen Einfügungen, die gut funktionierten, den IDbTransaction Parameter IDbTransaction hatte! Mein Fehler!

Beispiel:

Connection.Query<Entitiy>("sqlQuery",param: new { id= ID}, transaction: Transaction)

Beliebte Antwort

Microsoft empfiehlt, wenn möglich TransactionScope über Datenbank IDbTransaction zu verwenden. Der folgende Code sollte funktionieren, vorausgesetzt, dass mit SQL nichts falsch ist und sich der verwaltete Anbieter automatisch bei der Ambient-Transaktion anmeldet - etwas, das sich Anbieter mit gutem Verhalten vornehmen müssen.

using (var ts = new TransactionScope())
{
  using (_cn)
  {
    _cn.Open();
    ...
  }

  ts.complete();
}


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum