Supporto delle transazioni
In generale le transazioni non sono supportate dal Motore regole di business. È tuttavia possibile aggiornare un database in modo transazionale usando l'oggetto DataConnection , come illustrato nella procedura seguente:
Creare un oggetto SqlConnection usando un stringa di connessione e aprire la connessione.
SqlConnection connection = new SqlConnection("Initial Catalog=Northwind;Data Source=(local);Integrated Security=SSPI;"); connection.Open();
Creare un oggetto SqlTransaction chiamando il metodo BeginTransaction nell'oggetto connection creato nel passaggio 1.
SqlTransaction transaction = connection.BeginTransaction();
Creare un oggetto DataConnection usando gli oggetti connessione e transazione creati nei passaggi 1 e 2.
DataConnection dc = new DataConnection(datasetName, tableName, connection, transaction);
Passare l'oggetto DataConnection come fatto insieme ad altri fatti che si desidera passare ai criteri ed eseguire i criteri.
//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);
Richiamare il metodo Update nell'oggetto connessione dati. Tutti gli aggiornamenti eseguiti durante l'esecuzione del criterio vengono eseguiti solo in memoria. È necessario chiamare il metodo Update nell'oggetto connessione dati per aggiornare il database.
dc.Update();
A questo punto, richiamare Commit o Rollback nell'oggetto connessione dati in base alla propria logica.
//Checking the value of PropertyA in .net object //to decide whether to commit or rollback if (obj.PropertyA == true) transaction.Commit(); else transaction.Rollback();
Chiudere la connessione ed eliminare l'oggetto criterio.
sqlCon.Close(); policy.Dispose();
Di seguito è riportato il codice completo di tutti i passaggi:
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();
Commenti
È anche possibile usare gli oggetti OleDbConnection e OleDbTransaction anziché usare gli oggetti SqlConnection e SqlTransaction per eseguire gli aggiornamenti del database in modo transazionale.
Tutte le modifiche apportate dal criterio vengono eseguite in memoria. È necessario richiamare il metodo Update nell'oggetto DataConnection per aggiornare il database.
È possibile eseguire il commit o il rollback della transazione richiamando rispettivamente il metodo Commit o Rollback degli oggetti DataConnection.