Ссылки Entity Framework и ObjectContext - PullRequest
0 голосов
/ 02 марта 2012

Я играю с Entity Framework, чтобы посмотреть, как его можно использовать в новом проекте, над которым я работаю.Я поместил мой файл edmx в библиотеку классов, чтобы объекты (и доступ к базе данных) могли использоваться в нескольких местах.В настоящее время у меня есть веб-проект и консольный проект, которые ссылаются на библиотеку классов.

Одна из моих сущностей имеет класс Partial, определенный статическим методом.Цель метода - принять некоторые параметры и создать один или несколько экземпляров определенного класса.Моя первая версия метода создала экземпляр ObjectContext, создал класс Entity (или классы) и вернул Entities вызывающему методу.Затем вызывающий метод обновил некоторые свойства и попытался сохранить сущности, используя новый экземпляр ObjectContext.Очевидно, это не сработало, потому что сущности были привязаны (правильный термин ??) к контексту, созданному в статическом методе.

После некоторых исследований я изменил статический метод, чтобы также принимать ссылку ObjectContext, чтобы гарантировать, что всеОбъекты, где они были созданы, а затем обработаны и сохранены с использованием того же контекста.Это работает нормально, но дизайн кажется неправильным.

Предполагая, что мой один статический метод может перерасти во многие другие, или что мое приложение (особенно веб-приложение), вероятно, получит выгоду от дополнительных слоев (DAL или даже Сервис)Layer), имеет ли смысл для всех этих классов требовать параметр ObjectContext?

Я читал во многих публикациях, что создание ObjectContext с помощью шаблона Singleton - плохая идея, потому что "многие клиенты будут использовать один и тот же объект».Моя проблема в том, что я не понимаю, как это возможно.В локальном консольном приложении только один пользователь запускает приложение.В веб-приложении на каждый запрос может быть только один пользователь.Где проблема с разделением пользователей?Ни одна статья / публикация не упоминала об этом ... но где они ссылаются на шаблон Singleton, хранящий экземпляр объекта в контексте приложения?

Я также видел публикации, посвященные использованию сети и хранению экземпляра объекта вОбъект Session пользователя через объект HttpContext.Это имеет смысл, но, по-видимому, не касается использования вне Интернета.

Я думаю, что любое подходящее решение (статический метод, объект Factory и т. Д.), Скорее всего, будет реализовано в моей библиотеке классов, так что, очевидно, это необходимоподдерживать как веб, так и не веб-решения.Может быть, проверьте HttpContext, чтобы определить, в какой среде он работает.

Я надеялся http://www.west -wind.com / weblog / posts / 2008 / Feb / 05 / Linq-to-SQL-DataContext-Lifetime-Management было бы информативно, но мне трудно обернуть голову вокруг поста, и пример кода кажется излишним для создания экземпляров и совместного использования простого объекта.(Хотя я уверен, что просто не понимаю ...)

Любые мысли приветствуются.

Спасибо.

1 Ответ

0 голосов
/ 02 марта 2012

Проблема не в том, что «многие клиенты будут использовать один и тот же объект». Проблема в том, что ObjectContext предназначен для единой единицы работы. Если вы используете его для множества различных единиц работы, вы обнаружите, что существует ряд проблем.

  • Использование памяти будет расти и расти.
  • Ваше приложение будет работать медленнее, так как для исправления объекта приходится увеличивать объем работы.
  • Многопоточность не будет работать

Решение состоит в том, чтобы использовать ObjectContext в том виде, в котором он предназначен, а именно в качестве единой единицы работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...