2010-11-01 2 views
0

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

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

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

SqlDependency.Start(connectString, "NewResultAddedQueue"); 

Реализация моего репозитория EF4 вызывает исключение;

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

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

ответ

4

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

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

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

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

Посмотрите на LinqToCache на предмет использования уведомлений о запросах с помощью LINQ. В статье SqlDependency based caching of LINQ Queries объясняется, как эта интеграция работает с LinqToSQL и LinqToEF, а также почему вы не можете использовать ее с EF, если LINQ задействован.

+0

спасибо за ваш ответ. Я пробовал использовать LinqToCache и все-таки получить одно и то же исключение? – David

+0

Попробуйте сначала инициализировать SqlDependency без использования специализированной службы/очереди и посмотреть, можете ли вы работать с простым SqlCommand. –

+0

попробовал это и получил его, поскольку вы заявили, что уведомления о запросах не работают с LinqToEF/Entity Framework. Благодарю. – David