Рекомендации по контексту данных ASP.NET EntityFramework 4 - PullRequest
1 голос
/ 02 октября 2010

Я работаю над проектом, который использует EntityFramework 4, и я использую объекты-сущности в качестве своих бизнес-объектов. Недавно я столкнулся с проблемой, когда у меня был контекст, объявленный в операторе using в пользовательском элементе управления. Метод, в котором находился оператор, возвращал объект сущности, который использовался в другом элементе управления. Поэтому мне пришлось отсоединить сущность, а затем прикрепить ее к новому контексту в другом элементе управления. Я хотел бы избежать этого, если это возможно. Я думаю, что я хотел бы объявить контекст на главной странице, а затем передать его любой странице / usercontrol, которая нуждается в этом, чтобы они все использовали один и тот же контекст, и мне не нужно писать все это с помощью операторов.

Мои вопросы:

1) является плохой практикой объявлять контекст в Pre_Init / Page_Load, а затем утилизировать его в Page_Unload?

2) если это лучший метод обращения с ними?

3) если я пойду по пути объявления контекста на главной странице, каков наилучший способ передать его на страницы / usercontrols?

1 Ответ

4 голосов
/ 02 октября 2010

Самая большая проблема заключается в том, что вы связали контекст EF со своим уровнем представления.Здесь вы сталкиваетесь с проблемами разделения проблем, и это проявляется в путанице в контексте EF.

Не зная ничего о специфике вашего приложения, типичным лучшим решением будет инкапсулировать ваш контекст EF за пределы хранилищашаблон, а не подвергая ваш контекст непосредственно пользовательскому интерфейсу.Используйте репозиторий, чтобы получить нужные вам сущности и передать сущности / модель.Если у вас сложная сущность с родительскими / дочерними отношениями, стремитесь загрузить дочерние сущности, если вы все равно их используете.Таким образом, вы можете получить все, что вам нужно, в одном выражении использования.

Если вы хотите опубликовать код, мы можем углубиться в детали.Но подведем итог:

  • Не помещайте контекст в пользовательский контроль
  • Получите всю модель в верхней части вашего запроса и pass соответствующий объектдля каждого пользовательского элемента управления (в этом запросе верхнего уровня будет использоваться оператор с контекстом)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...