2

Oracle 11g データベースにあるテーブルに接続する非常に単純な Lightswitch プロジェクトを作成しています。プロジェクトに編集可能なグリッドを追加し、プロジェクトをビルドします。グリッドでデータを追加または編集しようとすると、次のエラーが発生します。

プロバイダー接続でトランザクションを開始中にエラーが発生しました。詳細については、内部例外を参照してください。

内部例外メッセージ: 接続は既にローカルまたは分散トランザクションの一部です

プロジェクトにカスタム コードはありません。私の認識では、Lightswitch はフォームをデータ上で非常に簡単にするはずだったということでした。私は助けを求めて周りを見回しましたが、今のところ何もありません。

4

3 に答える 3

1

//クリーンアップする必要があります。そうしないと、txn が失敗します..

 partial void SaveChanges_Executed()
{
    tx.Complete();
    tx.Dispose();
}
于 2011-10-05T20:22:54.747 に答える
1

このエラーが発生した場合、「内部例外メッセージ: 接続は既にローカルまたは分散トランザクションの一部です」

BScholz による 2 番目の投稿 ( https://forums.oracle.com/forums/thread.jspa?threadID=2263095 ) に従って問題を解決できます。

基本的に、Oracle データ ソースに対して SaveChanges_Excuting と SaveChanges_Excuted を実装する必要があります。

  1. 「ファイル ビュー」に切り替えます (デフォルトでは、LightSwitch は「論理ビュー」を表示します)。
  2. Server プロジェクトに「System.Transactions」への参照を追加します。
  3. 「論理ビュー」に戻ります
  4. データ ソース名を右クリックし、[コードの表示] をクリックして部分クラスを編集します。
  5. 以下のコードをコピーして貼り付けます。

    private TransactionScope _tscope;
    
    partial void SaveChanges_Executing()
    {
        _tscope = new TransactionScope(TransactionScopeOption.Required,
        new TransactionOptions
        {
            IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted
        });
    }
    
    partial void SaveChanges_Executed()
    {
        _tscope.Complete();
        _tscope.Dispose();
    }
    
于 2012-01-14T07:51:27.280 に答える
0

このコードをデータソース コードに追加してみてください。(Oracle データソースを右クリックし、[コードの表示] を選択します)

データソースに合わせてクラス名を変更することを忘れないでください。

using System.Transactions;

namespace LightSwitchApplication
{
    public partial class <ChangeThisToYourClassName>
    {
        private TransactionScope tx;

        partial void SaveChanges_Executed()
        {
            tx.Complete();
        }

        partial void SaveChanges_Executing()
        {
            tx = new TransactionScope(TransactionScopeOption.Required, 
                  new TransactionOptions { 
                      IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted
                  });
        } 
    }
}
于 2011-09-06T19:21:29.423 に答える