Как реализовать одну транзакцию в Entity Framework 5 как с контекстной базой данных SQL, так и с DB2 - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь реализовать оба DbContext (SQLDBContext & DB2Context) в одной транзакции, но каждый раз сталкиваюсь с проблемой, связанной с DB2.

Он отлично работает с SQL, но выдает ошибку при попыткедля доступа к DB2.

Исключением является:

Ошибка в получателе DB2Entities. Сбой связи с базовым менеджером транзакций.

Менеджер транзакций MSDTC не смогполучить транзакцию из исходного менеджера транзакций из-за проблем со связью.Возможные причины: брандмауэр присутствует и у него нет исключения для процесса MSDTC, две машины не могут найти друг друга по их именам NetBIOS или поддержка сетевых транзакций не включена для одного из двух менеджеров транзакций.(Исключение из HRESULT: 0x8004D02B)

Пожалуйста, помогите мне реализовать обе транзакции БД в рамках одной транзакции ИЛИ, если одна из них завершится неудачно, то обе должны выполнить откат.

Код похож на:

var option = new TransactionOptions
{
    IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted,
    Timeout = TimeSpan.FromSeconds(60)
};

using (var scopeOuter = new TransactionScope(TransactionScopeOption.Required, option))
{
    SQLDBContext.Table.AddSomething();
    SQLDBContext.SaveChanges();

    using (var scopeInner = new TransactionScope(TransactionScopeOption.Required, option))
        {
                DB2Context.Table.AddSomething();
                DB2Context.SaveChanges();
                scopeInner.Complete();
        }
       scopeOuter.Complete();
}

Спасибо!

1 Ответ

0 голосов
/ 30 ноября 2018

В DB2 вам нужно будет включить транзакции XA для MSDTC.Поскольку вы также используете несколько баз данных, вам может также необходимо включить сетевой DTC Access (см. Изображение ниже).

Чтобы изменить эти параметры, откройте оснастку управления службами компонентов (Администрирование)-> Службы компонентов или выполните comexp.msc).Затем в разделе «Компьютеры» -> «Мой компьютер» -> «Координатор распределенных транзакций» щелкните правой кнопкой мыши «Local DTC» и выберите свойства.Вы получите экран ниже.

MSDTC Configuration

...