在NHibernate中,SessionFactory被认为是一个繁重的对象,并且建议在应用程序生命周期中创建一次SessionFactory。但是,一旦我们处理了SessionFactory,我们就会在执行任何数据库操作之前调用open()。
在EntityFramework中,我们需要每次在使用底层存储执行任何操作之前创建ObjectContext的对象。在EF的情况下没有这样的开口。
我的问题是:
在EF中创建上下文类似于在NHibernate中调用SessionFactory上的Open()吗?
或我应该在应用程序生命周期内创建一次ObjectContext并分享它吗?
更新 我找到了关于管理ObjectContext生命周期的以下链接。但是在该链接中,作者提到:
但是,您不应该使用静态 ASP.NET中的ObjectContext 应用程序,因为静态成员 寿命超过了 单个HTTP请求。他们实际上是 受到了生命的束缚 AppDomain,可能是分钟或 小时。实际上,是静态类成员 在ASP.NET中甚至可以共享 多线程和用户的 应用。使用相同的 内部的ObjectContext实例 多个线程同时可以 造成严重问题。
但是在NHibernate中我们完全一样。我们将SessionFactory创建为静态字段,然后一次又一次地在应用程序中使用相同的实例。
在实体框架的情况下,这被认为是错误的做法吗?
答案 0 :(得分:3)
EF中的OC更像是NH中的Session而不是SessionFactory。