Entity Framework - жизненный цикл ObjectContext

Я новичок в Entity Framework и задаю вопрос о жизненном цикле  `ObjectContext`  в приложении WinForm с базой данных.

Для иллюстрации предположим, что я создаю регистр видов животных.

* В левой части формы у меня есть список видов животных (корова, свинья, собака и т. д. - я думаю, что это род, а не вид, но неважно!).
* Справа от формы у меня есть текстовые поля, comboboxes и т. д., чтобы отображать и разрешать редактирование свойств выбранного вида.

Когда пользователь выбирает вид слева, я использую:

```
var species = context.Single(x =>  x.id == speciesID);

```

затем привяжите различные элементы управления справа к  `species` .

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

Я думаю, что есть две проблемы:

1. Пользователь может вносить изменения во многие разные виды (несколько сотен существуют) в течение жизни контекста, заставляя его раздуваться.
2. В идеале я хотел бы предложить пользователю выбрать новый вид, если они хотят сохранить изменения в текущем (если они грязные) перед изменением. Как же я отбрасываю изменения - как я могу заставить контекст забыть, что он когда-либо видел объект?

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

Я что-то упускаю?

Большое спасибо

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

Я не понимаю, почему вам нужно повторно заполнять свои поле со списками каждый раз, когда вы отбрасываете контекст. Я предполагаю, что эти объекты не будут изменены одновременно с изменением видов. Таким образом, вы можете использовать  [Прикрепить](https://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.attach.aspx)  метод на этих объектах, чтобы сделать их частью текущего контекста объекта (ИЛИ вы можете использовать ключ/идентификатор выбранного объекта для запроса объекта из базы данных с текущим контекстом объекта).



Я думаю, вы найдете свой ответ в этой теме:

 [Отменить изменения в сущностных сущностях](https://stackoverflow.com/questions/5466677/undo-changes-in-entity-framework-entities)