Вопрос

Я вижу два основных варианта управления транзакциями с помощью 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 - нет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top