#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()){что-то связанное с}