Entity Framework - Уведомление об изменении базовых данных (в базе данных)
==========================================================================

 Я до сих пор успешно использую Entity Framework для манипулирования данными в базе данных. 

 Однако мне бы хотелось, чтобы одновременно с данными воспроизводилось более одного приложения (параллельная редакция). 

 Есть ли способ получать уведомления при изменении данных в базе данных? 

 Я видел решение, использующее триггер DML, но я хотел бы знать, есть ли другие способы достижения этого, и если да, то какое решение лучше всего использовать. 

 С Уважением, 

 Nic 

 **РЕДАКТИРОВАТЬ** 

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

* Приложение № 1 использует структуру сущностей в базе данных № 1
* Приложение № 2 также использует платформу сущностей в базе данных № 1
* Приложение № 1 изменяет модель объекта, что отражается в изменении базовой таблицы базы данных № 1.
* Я хочу, чтобы Приложение № 2 получало уведомление об этом изменении, чтобы оно могло иметь согласованные данные / данные up2date.

 Возможно, вам следует подумать об использовании EF в вашем приложении. Контекст EF следует использовать как можно быстрее: 

* Создать контекст
* Загрузить данные
* Изменить данные
* Сохранить данные
* Удалить контекст

 Из-за внутренней реализации (IdentityMap, UnitOfWork) долгоживущий контекст не является хорошим выбором, а с коротким жизненным контекстом вам вообще не нужно упомянутое поведение. Даже в настольном приложении вы должны использовать подход, подобный контексту для каждой формы. Вы загружаете данные, вы предоставляете данные своему пользователю, и до этого времени только пользователь может изменять данные и нажимать кнопку сохранения - ответственность за решение проблем параллелизма лежит на приложении (временная метка). Автоматическая модификация данных, которые являются частью текущей единицы работы, является довольно плохой идеей - что если пользователь уже изменил данные? Перезапишете ли вы его изменения? 

 **Редактировать:** 

 Вы можете прочитать больше о реализации `ObjectContext` [здесь](https://stackoverflow.com/questions/3653009/entity-framework-and-connection-pooling/3653392#3653392) . 

 Я могу представить себе сценарии, когда необходимо уведомление об обновлении данных для клиентских приложений. Это может быть отображение данных в режиме реального времени только для чтения - например, информация о торговле акциями. Но в таком случае вам нужно что-то более мощное. Это не сценарий для клиента, вызывающего ORM для получения данных, а сценарий для клиента, подписывающегося на некоторый уровень обслуживания / средний уровень, который обрабатывает извлечение данных и уведомление о быстром изменении. 

 Для простых сценариев, когда вам нужно только обновить данные в режиме полу-реального времени, вы можете использовать опрос - ваш клиент повторно вызовет запрос в течение нескольких секунд и использует стратегию [StoreWins](http://msdn.microsoft.com/en-us/library/system.data.objects.refreshmode%28v=vs.90%29.aspx) . Любая стратегия уведомлений выходит за рамки EF - вы должны реализовать ее как триггер, зависимость sql, опубликовать шаблон подписки или что-то еще. Даже с уведомлением вы сможете обрабатывать только некоторые события и запрашивать данные. 

 Опять же, если вы хотите уменьшить передачу данных с помощью опроса, вам нужен некоторый уровень обслуживания / средний уровень, который позволит обеспечить некоторый уровень кэширования (вы также можете попробовать WCF Data Services).