Ich habe eine adrette Methode, die ich gegen eine Klasse speichern möchte.
using (var block = new TransactionBlock())
{
const string sql =
"select * from Messages where statusId not in ('5','6')";
var results = TransactionBlock.Connection.Query<OpenMessages>
(sql,TransactionBlock.Transaction).ToList();
block.Commit();
return results;
}
Also, OpenMessages ist:
public class OpenMessages
{
public List<string> MessageId { get; set; }
}
Der folgende Fehler wird zurückgegeben:
System.InvalidOperationException wurde vom Benutzercode nicht behandelt. HResult = -2146233079 Message = ExecuteReader 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.
Ich habe mehrere andere Methoden, die gut funktionieren, nur nicht diese, die ich eine Liste zurückgeben muss.
Sie übergeben die Transaktion als Parameter. Nennen Sie es:
var results = TransactionBlock.Connection.Query<OpenMessages>
(sql,
transaction: TransactionBlock.Transaction).ToList();
Wenn es sich tatsächlich um eine gespeicherte Prozedur handelt, möchten Sie wahrscheinlich Folgendes hinzufügen:
commandType: CommandType.StoredProcedure