Transaktionsunterstützung
Im Allgemeinen unterstützt die Regel-Engine keine Transaktionen. Sie können eine Datenbank jedoch transaktionsgesteuert aktualisieren, indem Sie das DataConnection-Objekt verwenden, wie in den folgenden Schritten gezeigt:
Erstellen Sie mithilfe eines Verbindungszeichenfolge ein SqlConnection-Objekt, und öffnen Sie die Verbindung.
SqlConnection connection = new SqlConnection("Initial Catalog=Northwind;Data Source=(local);Integrated Security=SSPI;"); connection.Open();
Erstellen Sie ein SqlTransaction-Objekt , indem Sie die BeginTransaction-Methode für das Verbindungsobjekt aufrufen, das Sie in Schritt 1 erstellt haben.
SqlTransaction transaction = connection.BeginTransaction();
Erstellen Sie ein DataConnection-Objekt mithilfe der Verbindungs- und Transaktionsobjekte, die Sie in den Schritten 1 und 2 erstellt haben.
DataConnection dc = new DataConnection(datasetName, tableName, connection, transaction);
Übergeben Sie das DataConnection-Objekt als Tatsache zusammen mit allen anderen Fakten, die Sie an die Richtlinie übergeben möchten, und führen Sie die Richtlinie aus.
//Passing a .NET object as a fact along with the data connection MyClass obj = new MyClass(); object[] facts = new object[2]; facts[0] = dc; facts[1] = obj; Policy pol = new Policy(policyName); policy.Execute(facts);
Rufen Sie die Update-Methode für das Datenverbindungsobjekt auf. Alle während der Ausführung der Richtlinie ausgeführten Aktualisierungen werden nur im Speicher ausgeführt. Sie müssen die Update-Methode für das Datenverbindungsobjekt aufrufen, um die Datenbank zu aktualisieren.
dc.Update();
Rufen Sie nun Commit oder Rollback für das Datenverbindungsobjekt basierend auf Ihrer eigenen Logik auf.
//Checking the value of PropertyA in .net object //to decide whether to commit or rollback if (obj.PropertyA == true) transaction.Commit(); else transaction.Rollback();
Schließen Sie die Verbindung, und geben Sie das Richtlinienobjekt frei.
sqlCon.Close(); policy.Dispose();
Dies ist der vollständige Code mit allen Schritten:
SqlConnection connection = new SqlConnection("Initial Catalog=Northwind;Data Source=(local);Integrated Security=SSPI;");
connection.Open();
SqlTransaction transaction = connection.BeginTransaction();
DataConnection dc = new DataConnection(datasetName, tableName, connection, transaction);
MyClass obj = new MyClass();
object[] facts = new object[2];
facts[0] = dc;
facts[1] = obj;
Policy pol = new Policy(policyName);
policy.Execute(facts);
dc.Update();
if (obj.PropertyA == true)
transaction.Commit();
else
transaction.Rollback();
sqlCon.Close();
policy.Dispose();
Kommentare
Sie können auch die OleDbConnection - und OleDbTransaction-Objekte verwenden, anstatt die SqlConnection - und SqlTransaction-Objekte zu verwenden, um Datenbankupdates auf transaktionale Weise durchzuführen.
Alle von der Richtlinie vorgenommenen Änderungen werden im Speicher vorgenommen. Sie müssen die Update-Methode für das DataConnection-Objekt aufrufen, um die Datenbank zu aktualisieren.
Sie können entweder einen Commit oder ein Rollback für die Transaktion ausführen, indem Sie die Commit - oder Rollback-Methode der DataConnection-Objekte aufrufen.