Я читал об объеме операции в 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
Я не знал этого атрибута ThreadStatic, +1 из-за этого. Это действительно полезная команда. –
@OnlyaCuriousMind Будьте осторожны с 'ThreadStatic', хотя в нем есть несколько предостережений. Например, если вы назначаете значение по умолчанию, оно будет использоваться только для первого потока, из которого запускается статический конструктор, - другие потоки будут пустым (null/default) – Luaan