0

EntityFramework4データモードがあります。EFが非常に遅いため、ストアドプロシージャを使用してデータベースにデータをロードしています。エンティティモデルを使用して、ストアドプロシージャを呼び出します。すべてが1つのトランザクションに含まれている必要があります。

プロセスを高速化するために、いくつかの一括コピー操作を実行する必要があります。これには、SQLAnywhereとそのADO.NETプロバイダーソフトウェアを使用しています。

電話するとcontext.Connection.BeginTransactin()EntityTransaction戻ってきます。実際、私の変数は、DbTransactionすべてのトランザクションの基本クラスであるです。ただし、返される実際のオブジェクトはですEntityTransaction

EntityTransactionプロバイダー固有のトランザクションクラス(SAConnectionこの場合)にキャストできません。そうした場合、キャスト例外が発生します。しかし、どういうわけか、エンティティコンテキストがストアドプロシージャを呼び出すと、作成したプロバイダー固有のコマンドオブジェクトが、そのEntityTransactionオブジェクトによって表されるトランザクションに組み込まれます。

プロバイダーはこれをどのように行いますか?これは、一括コピー操作用のプロバイダー固有のトランザクションオブジェクトを取得するために使用できるメカニズムですか?

トニー

4

1 に答える 1

1

クラスを調べたところ、EntityTransaction実際には内部プロパティという名前StoreTransactionが存在します。この SO ディスカッションでソース コードが見つかった場合:この SqlTransaction は完了しました。使用できなくなります。あなたを助けるかもしれないEntity Framework Code First 。

これは、リフレクションを使用してメンバーにアクセスできない部分信頼環境では機能しないことに注意してください。

于 2012-09-07T21:05:43.007 に答える