LLBLGen — TransactionScope или DataAccessAdapter.StartTransaction
-
03-07-2019 - |
Вопрос
Я вижу два основных варианта управления транзакциями с помощью llblgen.
Метод 1:
using(DataAccessAdapter adapter = new DataAccessAdapter())
{
adapter.StartTransaction(IsolationLevel.ReadCommitted, "TR");
try
{
// ...
adapter.Commit();
}
catch
{
adapter.Rollback();
throw;
}
}
Метод 2:
using(TransactionScope scope = new TransactionScope())
{
// ...
scope.Complete();
}
Какой метод вы предпочитаете и почему?(Я использую адаптер/2.6.net/3.5)
Решение
Я бы склонялся к использованию TransactionScope для управления транзакциями, поскольку именно для этого он был разработан, тогда как DataAccessAdapter, хотя и имеет возможность создавать транзакции, предназначен в первую очередь для DataAccess.
Чтобы внести немного ясности, вы можете использовать TransactionScope для управления несколькими транзакциями через несколько DataAccessAdapter, в то время как один DataAccessAdapter имеет определенную область действия.
Например:
using(TransactionScope ts = new TransactionScope())
{
using(DataAccessAdapter d1 = new DataAccessAdapter())
{
//do some data access stuff
}
using(DataAccessAdapter d2 = new DataAccessAdapter())
{
//do some other data access stuff
}
ts.complete();
}
Еще одно замечание: TransactionScope является потокобезопасным, а DataAdapters - нет.
Не связан с StackOverflow