0

1 回のトランザクションで、1 つのデータベースに 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(...)」が新しいトランザクションとして登録されていることに気付きました。Linq to Sql ではなく、Entity Framework を使用しています。したがって、上記のコードは 20 回の繰り返しで壊れます。

それらを2つの独立したローカルトランザクションにし、手動でトランザクション処理を行う以外に、私のオプションは何ですか。

4

1 に答える 1

0

私たちはフォーラムであなたに返信しました。context.Connection.Open();解決策は、ループの前に追加することです。

于 2011-03-23T12:44:06.400 に答える