Dotconnect для Oracle - EF - слишком много локальных сеансов в глобальной транзакции - PullRequest
0 голосов
/ 23 марта 2011

Мне нужно вставить 2 записи в одну базу данных и около 40 записей в другую базу данных за одну транзакцию.Я использую TransactionScope и получаю эту ошибку.

Я читал эту статью, но это не помогло, потому что задействованы 2 дБ, и это распределенная транзакция.

http://www.devart.com/blogs/dotconnect/index.php/entity-framework-tips-and-tricks-part-3.html

Мой код похож наниже.

using (var ts  = new TransactionScope()) {
    using (var context = new MyContext()) {
      for (int i = 0; i < 40; i++)
      {
        var order = context.Orders.Where(a => a.name = 'xxx').Single();
        context.ArchiveOrders.Add(order);
      }
    }
}

Даже несмотря на то, что я создаю «Контекст» вне моего цикла (в отличие от примера в приведенной выше ссылке), код все равно завершается с ошибкой «слишком много локальных сессий».

Также я заметил, что каждый запрос "context.Orders.Where (...)" зачисляется в качестве новой транзакции.Я использую Entity Framework, а не Linq to Sql.Таким образом, вышеприведенный код разбивается на 20 итераций.

Какие у меня есть варианты, кроме того, чтобы сделать их 2-мя независимыми локальными транзакциями и каким-либо образом обрабатывать транзакции вручную.

1 Ответ

0 голосов
/ 23 марта 2011

Мы ответили вам здесь на нашем форуме. Решение состоит в том, чтобы добавить context.Connection.Open(); перед циклом.

...