Могут ли разные соединения с БД обновлять одну и ту же транзакцию в Oracle? - PullRequest
1 голос
/ 01 ноября 2019

Я думаю, что знаю ответ на этот вопрос, но оно того стоит ...

У меня большой кусок plsql. Это все в одной транзакции. Я хотел бы перенести часть его во внутренний веб-сервис (mvc .net / entity).

Но, конечно, транзакция не зафиксирована, поэтому сервис не может обновить нужные записи. to.

Было бы замечательно, если бы plsql, вызывающий службу, мог передать транзакцию, имя транзакции, контекст, соединение, что-то службе и службу мог бы вернуть ее для дальнейших изменений.

И на самом деле транзакция начинается в .net / wpf, переходит в plsql, возвращается и фиксируется в wfp. Таким образом, идея заключается в том, чтобы запустить транзакцию в wpf, перейти к plsql, который вызывает службу, вернуться к plsql, а затем к wpf и зафиксировать. Мы могли бы разбить plsql на две части, чтобы .net мог вызвать plsql, службу, а затем возобновить транзакцию в plsql и зафиксировать позже в .net.

1 Ответ

0 голосов
/ 05 ноября 2019

У меня было похожее требование, но я обновлял несколько баз данных, и мне потребовалась одна транзакция, чтобы зафиксировать или откатить все соответствующим образом. В итоге я использовал пространство имен System.Transactions и создал TransactionScope. Мне пришлось установить компонент из моего драйвера Oracle, но я уверен, что это было все, что было нужно. Это позволит вам контролировать транзакцию из вашего решения WPF и вызывать все, что требуется.

Нет оператора "Откат", не вызов метода Complete() естественным образом откатит транзакцию в конце использованиязаявление.

using (var trans = new TransactionScope(TransactionScopeOption.RequiresNew))
{
    var cn  = new OracleConnection();
    // perform PL/SQL

    if (success())
    {
        // this is the "Commit"
        trans.Complete();
    }
}

Подробнее см. официальная документация .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...