Compatibilidad con transacciones
Por lo general, el motor de reglas no admite transacciones. Sin embargo, puede actualizar una base de datos de forma transaccional mediante el objeto DataConnection , como se muestra en los pasos siguientes:
Cree un objeto SqlConnection mediante un cadena de conexión y abra la conexión.
SqlConnection connection = new SqlConnection("Initial Catalog=Northwind;Data Source=(local);Integrated Security=SSPI;"); connection.Open();
Cree un objeto SqlTransaction llamando al método BeginTransaction en el objeto de conexión que creó en el paso 1.
SqlTransaction transaction = connection.BeginTransaction();
Cree un objeto DataConnection mediante los objetos de conexión y transacción que creó en los pasos 1 y 2.
DataConnection dc = new DataConnection(datasetName, tableName, connection, transaction);
Pase el objeto DataConnection como un hecho junto con cualquier otro hecho que quiera pasar a la directiva y ejecute la directiva.
//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);
Invoque el método Update en el objeto de conexión de datos. Todas las actualizaciones realizadas durante la ejecución de la directiva solo se efectúan en la memoria. Debe llamar al método Update en el objeto de conexión de datos para actualizar la base de datos.
dc.Update();
Ahora, invoque Commit o Rollback en el objeto de conexión de datos en función de su propia lógica.
//Checking the value of PropertyA in .net object //to decide whether to commit or rollback if (obj.PropertyA == true) transaction.Commit(); else transaction.Rollback();
Cierre la conexión y elimine el objeto de directiva.
sqlCon.Close(); policy.Dispose();
El siguiente código es el código completo con todos los pasos:
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();
Comentarios
También puede usar los objetos OleDbConnection y OleDbTransaction en lugar de usar los objetos SqlConnection y SqlTransaction para realizar actualizaciones de base de datos de forma transaccional.
Todas las modificaciones realizadas a partir de la directiva se efectúan en la memoria. Debe invocar el método Update en el objeto DataConnection para actualizar la base de datos.
Puede confirmar o revertir la transacción invocando el método Commit o Rollback de los objetos DataConnection respectivamente.