Tag: sessionfactory

针对后台工作者的Web应用程序的Nhibernate会话管理策略?

对于Web应用程序,处理会话的好方法似乎是使用设置managed_web ,在Begin / EndRequest上调用CurrentSessionContext.Bind/Unbind 。 然后我可以在存储库类中使用sessionFactory.GetCurrentSession() 。 这适用于所有页面请求。 但是我有后台工作人员做东西并使用相同的存储库类来做事情。 这些不在Web请求中运行,因此会话处理将不起作用。 有关如何解决这个问题的任何建议?

确保NHibernate SessionFactory仅创建一次

我编写了一个NHibernateSessionFactory类,它包含一个静态的Nhibernate ISessionFactory。 这用于确保我们只有一个会话工厂,并且第一次调用OpenSession()我创建了一个实际的SessionFactory – 下次我使用它并在其上打开一个会话。 代码如下所示: public class NhibernateSessionFactory : INhibernateSessionFactory { private static ISessionFactory _sessionFactory; public ISession OpenSession() { if (_sessionFactory == null) { var cfg = Fluently.Configure(). Database(SQLiteConfiguration.Standard.ShowSql().UsingFile(“Foo.db”)). Mappings(m => m.FluentMappings.AddFromAssemblyOf()); _sessionFactory = cfg.BuildSessionFactory(); BuildSchema(cfg); } return _sessionFactory.OpenSession(); } private static void BuildSchema(FluentConfiguration configuration) { var sessionSource = new SessionSource(configuration); var session = […]