Мы использовали DAAB для некоторых устаревших бизнес-объектов, и теперь мы решили использовать TransactionScope
для некоторых новых бизнес-объектов. Теперь мы должны вызвать новый бизнес-объект в старом коде бизнес-объекта. Старый код бизнес-объекта будет выглядеть так, когда в нем вызывается новый бизнес-объект:
Database db = DatabaseFactory.CreateDatabase();
// create connection instance
DbConnection dbConnection = db.CreateConnection();
dbConnection.Open(); // open connection
// create transaction instance & start the transaction
DbTransaction dbTransaction = dbConnection.BeginTransaction();
// do some old business object insert/update
// now call the new business object
newBO.Update();
// commit transaction
dbTransaction.Commit();
Новый бизнес-объект содержит следующий код:
using (TransactionScope scope = new TransactionScope())
{
// do some update/insert
scope.Complete();
}
Вопрос в том, будет ли это работать?
Мое нынешнее убеждение заключается в том, что оно будет работать на основе:
- эта статья MSDN , в которой говорится, что если транзакция была создана вне области действия, то создатель транзакции по-прежнему отвечает за фиксацию / откат ее - что в принципе и является моим случаем , это будет отлично работать, если это правда.
- частичная трассировка TransactionScope, которую я выполняю, также указывает, что фиксация не обязательно фиксируется при утилизации TransactionScope, но я не смог полностью завершить трассировку, поэтому я не уверен на 100%, была ли моя трассировка точной
Однако есть несколько статей о TransactionScope, включая это сообщение о SO , в котором не упоминается этот сценарий, а просто говорится, что транзакция (-ы) будет откатываться без указания, была ли создана транзакция. самим TransactionScope или нет.
Итак, мой вопрос: из вашего опыта, в чем дело?
a) транзакция, созданная за пределами TransactionScope, передается при утилизации области действия
OR
b) транзакция, созданная за пределами TransactionScope, не была передана в распоряжение, и создатель должен позаботиться об откате и фиксации?