Entity framework: жизнь контекста данных?

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

В целом вывод, который я вижу, заключается в том, что в настольных приложениях срок жизни контекста данных должен быть сроком жизни формы, а в приложениях WCF срок жизни должен быть сроком жизни сеанса.

Причина, насколько я понимаю, заключается в том, что время жизни контекста данных должно быть достаточно большим, чтобы иметь преимущества единицы работы контекста, но не очень большим, чтобы потерять свои преимущества.

Но, например, если я читаю некоторые данные из базы данных, а контекст данных создается как свойство формы в настольном приложении, если я делаю изменения, мне нужно только изменить значения в сущностях контекст данных и вызовите метод savechanges(), а EF сохранит изменения в контексте данных.Итак, у меня есть два взаимодействия с базой данных: одно для получения данных, а другое для сохранения изменений.

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

Если я использую контекст данных для каждой операции, я читаю данные с контекстом данных, который является dispose, вношу изменения в информацию в локальных переменных, а затем, когда я сохраняю изменения, я должен использовать другой контекст данных, который снова получить сущности, я должен искать сущности для передачи информации из моих локальных переменных в сущности, а затем сохранять изменения.

В этом случае у меня есть три взаимодействия с базой данных, поэтому это менее эффективно, и база данных должна выполнять больше работы. Один для получения результатов и передачи информации в локальные переменные, другой для повторного получения результатов и передачи информации из локальных переменных в контекст и, наконец, сохранения изменений. Кроме того, я должен выполнить дополнительную работу по поиску сущностей во втором контексте данных, чтобы передать изменения из локальных переменных в новый контекст.

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

Итак, какой вариант лучше всего подходит для работы с контекстом данных в настольных приложениях и приложениях WCF? Возможно, я неправильно использую контекст данных?

Возможно, если я воспользуюсь вторым подходом, и мои локальные переменные тоже будут сущностями, я смогу создать второй контекст данных, и вместо загрузки сущностей из базы данных я смогу напрямую добавить локальные сущности, изменив их состояние на добавление, изменены или удалены, а затем контекст данных может сохранить изменения?

0
задан rptwsthi 7 March 2013 в 04:56
поделиться