我讀到關於C#中的交易範圍和它的工作原理是這樣的:如何做一個像'TransactionScope'的代碼工作?
using (connectionDb)
{
connectionDb.Open();
using (var ts = new System.Transactions.TransactionScope())
{ <--
try
{
connectionDb.ExecuteNonQuery();
ts.Complete();
}
catch (Exception)
{
throw;
}
finally
{ }
} <--
}
每一個條款中使用括號工作在相同的交易,但我不明白的代碼是如何確定的databasecommand是在範圍上運行而不傳遞事務範圍參數既不打開連接,也不執行查詢。
舉例來說,如果我有以下代碼:
var myObject = new MyObject();
var childObject = new ChildObject();
childObject.Foo(myObject);
childObject.Bar(myObject);
我可以爲變量創建myObject
並使用到childObject方法,而通過參數傳給她一個範圍?像這樣:
using(var myObject = new MyObject())
{
childObject.Foo(); -- Here the method use the variable myObject
childObject.Bar(); -- Here the method use the variable myObject
}
只需使用ThreadStatic屬性標記您的靜態。 – Jessica 2015-02-06 11:43:52
我不知道這個ThreadStatic屬性,因爲這個。它是一個非常有用的命令。 – 2015-02-06 11:52:27
@OnlyaCuriousMind注意'ThreadStatic',但它有一些注意事項。例如,如果您要分配一個默認值,它將只用於導致靜態構造函數運行的第一個線程 - 其他線程將使其爲空(空/默認) – Luaan 2015-02-06 12:05:56