В NHibernate SessionFactory считается тяжелым объектом, и предлагается, чтобы SessionFactory создавался один раз в течение жизненного цикла приложения. Однако, как только мы получим дескриптор SessionFactory, мы вызываем open () для него перед выполнением любой операции с БД.
В EntityFramework нам нужно каждый раз создавать объект ObjectContext перед выполнением какой-либо операции с базовым хранилищем. В случае EF открытия нет как такового.
Мои вопросы:
Является ли создание контекста в EF аналогично вызову Open () в SessionFactory в NHibernate?
Или я должен создать ObjectContext один раз в жизненном цикле приложения и поделиться им между собой?
Обновление:
Я нашел следующую ссылку на управление продолжительностью жизни ObjectContext. Однако в этой ссылке автор упоминает:
http://dotnetslackers.com/articles/ado_net/Managing-Entity-Framework-ObjectContext-lifespan-and-scope-in-n-layered-ASP-NET-applications.aspx#1390
Однако вы не должны использовать статический
ObjectContext в ASP.NET
приложение, так как статические члены
иметь продолжительность жизни выше, чем у
один HTTP-запрос. Они на самом деле
связаны с продолжительностью жизни
AppDomain, который может быть минут или
ч. На самом деле, статичные члены класса
в ASP.NET даже разделяются между
несколько потоков и пользователей
приложение. Используя то же самое
Экземпляр ObjectContext изнутри
несколько потоков одновременно могут
вызывают серьезные проблемы.
Но в NHibernate мы делаем то же самое. Мы создаем SessionFactory как статическое поле, а затем снова и снова используем один и тот же экземпляр в приложении.
Это то, что предлагается в качестве неправильной практики в случае Entity Framework?