Работа с транзакциями в .net. Был вопрос о текущих транзакциях через вспомогательные функции. Нужно ли использовать зависимые транзакции, если контекст объекта является общим для под-методов?Функции TransactionScope
Например, в следующем коде - Объявляю контекст объекта в конструкторе моего класса (не уверен, если это лучшая практика)
public class EmployeeRepository
{
private EmployeeContext ec;
public EmployeeRepository()
{
objectContext = new EmployeeContext();
}
public InitTransaction(EmployeeEntity emp1)
{
using (TransactionScope transaction = new TransactionScope())
{
try
{ ec.employees.AddObject(emp1);
SubFunction1();
ec.SaveChanges();
}
catch
{
//catch
}
}
//commit the transaction here
ec.AcceptAllChanges();
}
public SubFunction1()
{
//some processing
//using same object context
ec.someother.AddObject(someobject);
ec.SaveChanges();
}
}
Я хочу подфункции быть частью сделок также? В этом случае я должен использовать зависимую транзакцию в SubFunction1, хотя я использую тот же контекст объекта? Или Должен ли я добавить
using (TransactionScope transaction = new TransactionScope());
в пределах SubFunction1. Указатели в правильном направлении были бы весьма полезны.
Теперь мой вопрос - будет ли мой код работать как -i.e. Подфункция1 будет частью транзакции, если я использую тот же контекст объекта. Должен ли я явно начать транзакцию в SubFunction1. – user275157
Да - это сработает - SubFunction1 (и все, что вызвано SubFunction1), по умолчанию зачислен в ваш TransactionScope. Ресурсы, поддерживающие транзакцию, такие как * Контексты и SQLConnections будут автоматически зачисляться. – StuartLC
Спасибо за ввод. Так что никаких новых транзакций в подфункции1 нет. Также на уровнях изоляции - я использую mysql и имею возможность активировать неудачные транзакции для конечного пользователя (для их повторения). Поэтому я думал, что чтение serializable будет безопасным. Должен ли я изменять уровень изоляции для чтения? – user275157