異動支援
一般而言,規則引擎不支援交易。 不過,您可以使用 DataConnection 物件,以交易方式更新資料庫,如下列步驟所示:
使用連接字串建立SqlConnection物件,然後開啟連接。
SqlConnection connection = new SqlConnection("Initial Catalog=Northwind;Data Source=(local);Integrated Security=SSPI;"); connection.Open();
在您在步驟 1 中建立的連線物件上呼叫BeginTransaction方法,以建立SqlTransaction物件。
SqlTransaction transaction = connection.BeginTransaction();
使用您在步驟 1 和 2 中建立的連接和交易對象,建立 DataConnection 物件。
DataConnection dc = new DataConnection(datasetName, tableName, connection, transaction);
傳遞 DataConnection 物件做為事實,以及您想要傳遞至原則的任何其他事實,並執行原則。
//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);
在資料連線物件上叫用 Update 方法。 執行原則時所有更新作業只是在記憶體中完成的。 您必須在資料連線物件上呼叫 Update 方法,才能更新資料庫。
dc.Update();
現在,根據您自己的邏輯,在資料連線物件上叫用 認可 或 復原 。
//Checking the value of PropertyA in .net object //to decide whether to commit or rollback if (obj.PropertyA == true) transaction.Commit(); else transaction.Rollback();
關閉連線,並處置原則物件。
sqlCon.Close(); policy.Dispose();
以下是包含所有步驟的完整程式碼:
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();
註解
您也可以使用 OleDbConnection 和 OleDbTransaction 物件,而不是使用 SqlConnection 和 SqlTransaction 物件,以交易方式執行資料庫更新。
從原則執行的所有修改作業都是在記憶體中完成的。 您必須在DataConnection物件上叫用Update方法,才能更新資料庫。
您可以分別叫用DataConnection物件的Commit或Rollback方法來認可或復原交易。