2015-06-15 11 views
0

Для ORM, таких как EF и NHibernate, multipleplaces предлагают использовать «контекст для каждого метода» (или для каждого запроса на транзакцию) для веб-приложений и сервисов и использовать «контекст для каждой формы» для таких толстых клиентов, как WinForms и WPF. В C# утилизация ресурсов с использованием контекста для каждого метода является чистым и понятным с блоком using.Управление в форме ObjectContext lifetime

using (var context = new MyDbContext()) { /* ... */ } 

Однако, используя WinForms, есть несколько возможных мест, чтобы позвонить context.Dispose(): FormClosing событие, FormClosed событие, Финалайзер, OnClosing переопределение, OnClosed переопределение, не делать ничего, и пусть GC собрать его.

Каков наилучший способ избавиться от ресурсов «контекст на форму»?

ответ

1

Как ни странно это звучит, вы не должны распоряжаться вам DbContext (если вы вручную не открыли соединение самостоятельно) Посмотрите на это:
Do I always have to call Dispose() on my DbContext objects? Nope

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^