Разница между NHibernate SessionFactory и EF 4.0 ObjectContext - PullRequest
3 голосов
/ 26 сентября 2010

В 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?

1 Ответ

3 голосов
/ 27 сентября 2010

OC в EF больше похож на Session в NH, чем на SessionFactory.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...