NHibernate SessionFactory和EF 4.0 ObjectContext之间的区别

时间:2010-09-26 18:09:51

标签: .net nhibernate entity-framework orm entity-framework-4

在NHibernate中,SessionFactory被认为是一个繁重的对象,并且建议在应用程序生命周期中创建一次SessionFactory。但是,一旦我们处理了SessionFactory,我们就会在执行任何数据库操作之前调用open()。

在EntityFramework中,我们需要每次在使用底层存储执行任何操作之前创建ObjectContext的对象。在EF的情况下没有这样的开口。

我的问题是:

在EF中创建上下文类似于在NHibernate中调用SessionFactory上的Open()吗?

我应该在应用程序生命周期内创建一次ObjectContext并分享它吗?

更新 我找到了关于管理ObjectContext生命周期的以下链接。但是在该链接中,作者提到:

http://dotnetslackers.com/articles/ado_net/Managing-Entity-Framework-ObjectContext-lifespan-and-scope-in-n-layered-ASP-NET-applications.aspx#1390

  

但是,您不应该使用静态   ASP.NET中的ObjectContext   应用程序,因为静态成员   寿命超过了   单个HTTP请求。他们实际上是   受到了生命的束缚   AppDomain,可能是分钟或   小时。实际上,是静态类成员   在ASP.NET中甚至可以共享   多线程和用户的   应用。使用相同的   内部的ObjectContext实例   多个线程同时可以   造成严重问题。

但是在NHibernate中我们完全一样。我们将SessionFactory创建为静态字段,然后一次又一次地在应用程序中使用相同的实例。

在实体框架的情况下,这被认为是错误的做法吗?

1 个答案:

答案 0 :(得分:3)

EF中的OC更像是NH中的Session而不是SessionFactory。