EF4 и объект SQLDependency - PullRequest
       26

EF4 и объект SQLDependency

0 голосов
/ 01 ноября 2010

Я пытаюсь использовать EF4 с объектом SQLDependency без особой удачи.

Я создал свою собственную очередь и службу и хочу, чтобы мое приложение WPF отслеживало эту очередь на предмет изменений данных, чтобы я мог обновлять пользовательский интерфейс (решил попробовать это, а не постоянно запрашивать базу данных).

Даже при запуске приложения я звоню;

SqlDependency.Start(connectString, "NewResultAddedQueue");

Моя реализация репозитория EF4 выдает исключение, заявляющее;

{"При использовании SqlDependency без предоставление значения параметров, SqlDependency.Start () должен быть вызван перед выполнением команды добавлено к экземпляру SqlDependency. "}

Во-первых, я пытаюсь достичь чего-то, что невозможно с EF4, или есть другой подход, который я могу использовать, чтобы приложение могло прослушивать изменения данных из SQL 2005 ??

1 Ответ

4 голосов
/ 01 ноября 2010

Во-первых, вы не можете использовать собственную очередь и службу, если у вас запущено более одного экземпляра приложения WPF.Инфраструктура SqlDependency работает для каждого домена приложения, и если вы совместно используете очередь, экземпляры (домены приложения) будут красть уведомления друг у друга, что приведет к погрешности во время выполнения.Если вы не знаете точно , что вы делаете, просто используйте реализацию по умолчанию (развернутая служба / очередь / процедура):

Сообщение об ошибке довольно ясно: 'При использовании SqlDependency без указания значения параметра yada yada yada '.Таким образом, вы не предоставляете options значение , поэтому используется значение по умолчанию:

Параметры запроса уведомления, которые будут использоваться этой зависимостью. null для использования службы по умолчанию .

В то же время вы перезаписываете службу по умолчанию в вызове .Start().Как я уже сказал, лучше сначала поработайте с делом по умолчанию, пока вы не будете уверены, что понимаете, что происходит, прежде чем приступить к настраиваемому поведению, отличному от заданного по умолчанию, особенно с чем-то таким сложным, как Таинственное уведомление .

Посмотрите LinqToCache , чтобы узнать, как использовать Query Notification с LINQ.Статья Кэширование LINQ Queries на основе SqlDependency объясняет, как эта интеграция работает с LinqToSQL и LinqToEF, а также почему вы не можете использовать ее с EF, если задействован LINQ.

...