Entity Framework 4 — срок службы / область контекста в приложении winform

#winforms #entity-framework

#winforms #entity-framework

Вопрос:

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

Я работаю с ASP.NET приложение, в котором контекст управляется каждым http-запросом, что, на мой взгляд, является очень хорошим подходом.

Однако сейчас я работаю с приложением winforms, и у меня иногда возникают транзакции или отчеты, которые будут выполняться не очень хорошо, если я просто создам контекст для каждого запроса. Не то чтобы эта проблема с производительностью была очень проблематичной, я просто хочу услышать, есть ли простая стратегия в соответствии с HTTP-запросом в ASP.NET для winforms?

Ответ №1:

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

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

Таким образом, все ваши изменения инкапсулируются в контексте, и вы позволяете Entity Framework оборачивать вызовы базы данных в довольно маленькую транзакцию, не беспокоясь об этом самостоятельно.

Я предпочитаю абстрагировать шаблоны репозитория и единицы работы из контекста сущности, чтобы я мог использовать их независимо (что делает все предельно понятным). В MSDN действительно есть приличная статья о деталях:

MSDN — Использование репозитория и шаблонов единиц работы с Entity Framework 4

Комментарии:

1. amp; @dotnedify — Спасибо за это, я собираюсь сделать то же самое для наших убогих форм, управляемых набором данных. За всех.

2. У меня появилась идея. Моя проблема в том, что я создавал статические классы со статическими методами для обработки таких методов, как Insert / Update / Get, и в результате мне приходится передавать контекст для каждой функции вместо создания экземпляра класса Manager и передачи его на уровень класса. Спасибо, это действительно открыло мне глаза!

3. @Tom — рад, что я хоть раз косвенно помог!

4. я не очень хорошо разбираюсь в терминологии программирования, вы имеете в виду, что ее полезно использовать, используя (contxt = new contxtDBEntities()){что-то связанное с}