Nano Hash - криптовалюты, майнинг, программирование

LLBLGen — TransactionScope или DataAccessAdapter.StartTransaction

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


Ответы:


1

Я бы склонялся к использованию 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 — нет.

30.04.2009
  • По вашему опыту, TransactionScope всегда работал так, как вы ожидаете? Там очень мало, но мне все еще интересно, есть ли какие-нибудь ошибки. 30.04.2009
  • он всегда работал так, как я ожидаю, однако я бы посоветовал вам прочитать документацию и понять, почему он делает то, что делает, особенно в отношении вложенных объектов транзакций и нескольких транзакций. 30.04.2009
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..