Мы пишем приложение WPF с использованием инфраструктуры Entity (Silverlight с услугами RIA, если быть точным). Мы используем общий объект ObjectContext через приложение, чтобы мы могли использовать данные для обмена данными через модули.Entity Framework ObjectContext в приложении Windows/WPF/Silverlight
Проблема заключается в том, что если пользователь во время своей работы открывает, скажем, исторические продажи, он загружается в ObjectContext и остается там до конца приложения. Поэтому следует использовать еще один шаблон.
Я знаю, что ObjectContexts следует использовать как единую единицу работы. Но тогда, как вы позволяете другим частям приложения знать, что что-то изменилось, и они должны перезагрузить свои данные?
Редактировать: Хорошо, EventAggregator, но тогда это приведет к тому, что все остальные части будут перезагружать (возможно, большую часть дубликатов) данных. Также возможно, что для всех типов групп entites потребуется много событий.
Как вы решаете эти проблемы? Мое текущее решение - это своего рода компромисс - используйте общий ObjectContext для основных данных, используемых целым применением, чтобы их можно было совместно использовать и обновлять автоматически. А для большого объема данных используйте новый отдельный ObjectContext. Любые лучшие идеи?
Есть ли способ «освободить» объекты из своего DataContext, чтобы сборщик мусора мог выполнять свою работу и освобождать память?
С помощью этого приложения мы говорим о Silverlight. Используя Prism/Caliburn, я считаю, что не проблема иметь один ObjectContext для представления (модуль?). Опять же, проблема в том, что, если для клиента загружено много данных? Насколько я знаю, лучшим решением было бы создать общий объект ObjectContext для базовых объектов, которые используются во всем приложении, чтобы они автоматически синхронизировались, и отдельные объекты ObjectContext для загрузки большого количества данных, например. некоторые исторические отчеты. – gius
Я бы не стал посылать клиенту действительно большие блоки данных. Вместо этого я буду фильтровать на сервере и возвращать только те результаты, которые клиент хочет увидеть в этот момент. Люди не могут читать 100 000 записей, поэтому не отправляйте их людям. Вместо этого пусть проблема будет искать/фильтровать и отправлять результаты только клиенту. Если вы создаете отчеты, создайте сводные сводные данные на сервере. Например, было бы лучше рассчитать ежемесячный объем продаж на сервере и отправить единый номер клиенту, а не 5000 записей о продажах. –
Это правда, но если пользователь видит в любое время в течение жизни приложения, скажем, страницы 1, 10, 20, эти данные все равно будут в памяти. С другой стороны, использование отдельного объекта ObjectContext и пейджинга данных может решить проблему с большими объемами данных в памяти. – gius