0

SQLDependencyオブジェクトでEF4を使用しようとしていますが、あまり運がありません。

独自のキューとサービスを作成し、WPFアプリケーションでこのキューのデータ変更を監視して、UIを更新できるようにします(データベースに常にクエリを実行するのではなく、これを試すことを選択しました)。

アプリケーションの起動時に呼び出しますが、

SqlDependency.Start(connectString, "NewResultAddedQueue");

私のEF4リポジトリの実装は、次のような例外をスローします。

{"オプション値を指定せずにSqlDependencyを使用する場合、SqlDependencyインスタンスに追加されたコマンドを実行する前にSqlDependency.Start()を呼び出す必要があります。"}

まず、EF4では不可能なことを達成しようとしていますか、それともアプリケーションがSQL 2005からのデータ変更をリッスンできるようにするための別のアプローチがありますか?

4

1 に答える 1

4

まず、WPFアプリケーションの複数のインスタンスを実行している場合、独自のキューとサービスを使用することはできません。SqlDependencyインフラストラクチャはアプリドメインごとに機能し、キューを共有すると、インスタンス(appdomains)が相互に通知を盗み、ランタイムの混乱を招きます。何をしているのかを正確に理解していない限り、デフォルトの実装(ジャストインタイムでデプロイされたサービス/キュー/手順)を使用してください。

エラーメッセージは非常に明確です。'オプション値を指定せずにSqlDependencyを使用する場合yadayadayada'。optionsしたがって、値を指定しないため、デフォルトが使用されます。

この依存関係で使用される通知要求オプション。デフォルトのサービスを使用するにはnull

同時に、.Start()通話のデフォルトサービスを上書きしています。私が言ったように、デフォルト以外のカスタマイズされた動作に挑戦する前に、何が起こっているのかを確実に理解するまで、最初にデフォルトのケースを機能させる方がよいでしょ

LINQでクエリ通知を使用する方法については、LinqToCacheを参照してくださいLINQクエリのSqlDependencyベースのキャッシュの記事では、この統合がLinqToSQLおよびLinqToEFでどのように機能するか、およびLINQが関係している場合にEFで実際に使用できない理由について説明しています。

于 2010-11-01T20:35:33.627 に答える