Для ORM, таких как EF и NHibernate, multipleplaces предлагают использовать «контекст для каждого метода» (или для каждого запроса на транзакцию) для веб-приложений и сервисов и использовать «контекст для каждой формы» для таких толстых клиентов, как WinForms и WPF. В C# утилизация ресурсов с использованием контекста для каждого метода является чистым и понятным с блоком using
.Управление в форме ObjectContext lifetime
using (var context = new MyDbContext()) { /* ... */ }
Однако, используя WinForms, есть несколько возможных мест, чтобы позвонить context.Dispose()
: FormClosing событие, FormClosed событие, Финалайзер, OnClosing переопределение, OnClosed переопределение, не делать ничего, и пусть GC собрать его.
Каков наилучший способ избавиться от ресурсов «контекст на форму»?