没有会话绑定到当前上下文

发布于 2024-12-05 11:16:20 字数 1686 浏览 0 评论 0原文

我遵循了本教程: http://nhforge.org/blogs/nhibernate/archive/2011/03/03/ effective-nhibernate-session-management-for-web-apps.aspx

我没有得到尝试加载页面时出现“没有会话绑定到当前上下文”错误 (mvc 3)。

public static ISessionFactory BuildSessionFactory()
        {

            return Fluently.Configure()
                .Database(MsSqlConfiguration.MsSql2008 // 
                              .ConnectionString(@"Server=.\SQLExpress;Database=db1;Uid=dev;Pwd=123;")
                              .ShowSql())
                //.ExposeConfiguration(c => c.SetProperty("current_session_context_class", "web"))
                //.CurrentSessionContext<CallSessionContext>()             
                .Mappings(m => m.FluentMappings
                                   .AddFromAssemblyOf<User>())
                .ExposeConfiguration(cfg => new SchemaExport(cfg)
                                                .Create(false, false))
                .BuildSessionFactory();
        }

实际错误在我的 Repository.cs 文件中:

第 114 行:public virtual T Get(int id) 第 115 行:{ 第 116 行: return _sessionFactory.GetCurrentSession().Get(id); 第 117 行:} 第 118 行:

当我调试它时,_sessionFactory 不为 null 或任何其他内容,它似乎找不到绑定的会话。

我在 web.config 中连接了 httpmodule,并且它确实运行了,所以这不是问题。

在我的 nhibernate 配置中,我尝试了以下两种方法:

.ExposeConfiguration(c => c.SetProperty("current_session_context_class", "web"))

.CurrentSessionContext<CallSessionContext>()

但那不起作用。

I followed this tutorial: http://nhforge.org/blogs/nhibernate/archive/2011/03/03/effective-nhibernate-session-management-for-web-apps.aspx

I am not getting a 'no session bound to the current context' error when trying to load a page (mvc 3).

public static ISessionFactory BuildSessionFactory()
        {

            return Fluently.Configure()
                .Database(MsSqlConfiguration.MsSql2008 // 
                              .ConnectionString(@"Server=.\SQLExpress;Database=db1;Uid=dev;Pwd=123;")
                              .ShowSql())
                //.ExposeConfiguration(c => c.SetProperty("current_session_context_class", "web"))
                //.CurrentSessionContext<CallSessionContext>()             
                .Mappings(m => m.FluentMappings
                                   .AddFromAssemblyOf<User>())
                .ExposeConfiguration(cfg => new SchemaExport(cfg)
                                                .Create(false, false))
                .BuildSessionFactory();
        }

The actual error is in my Repository.cs file:

Line 114: public virtual T Get(int id)
Line 115: {
Line 116: return _sessionFactory.GetCurrentSession().Get(id);
Line 117: }
Line 118:

When I was debugging it, _sessionFactory wasn't null or anything, it just can't seem to find the bound session.

I have the httpmodule wired up in my web.config, and it does get run so that's not the problem.

In my nhibernate configuration, I tried both:

.ExposeConfiguration(c => c.SetProperty("current_session_context_class", "web"))

and

.CurrentSessionContext<CallSessionContext>()

But that didn't work.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

離人涙 2024-12-12 11:16:20

听起来您没有将会话绑定到上下文。请看下面的示例:

public class SessionFactory
{
    protected static ISessionFactory sessionFactory;
    private static ILog log = LogManager.GetLogger(typeof(SessionFactory));

    //Several functions omitted for brevity

    public static ISession GetCurrentSession()
    {
        if(!CurrentSessionContext.HasBind(GetSessionFactory()))
            CurrentSessionContext.Bind(GetSessionFactory().OpenSession());

        return GetSessionFactory().GetCurrentSession();
    }

    public static void DisposeCurrentSession()
    {
        ISession currentSession = CurrentSessionContext.Unbind(GetSessionFactory());

        currentSession.Close();
        currentSession.Dispose();
    }
}

上面的关键是,每当您检索第一个会话时,都会将其绑定到您正在使用的任何上下文。

It sounds like you are not binding your session to the context. Look at the below for an example:

public class SessionFactory
{
    protected static ISessionFactory sessionFactory;
    private static ILog log = LogManager.GetLogger(typeof(SessionFactory));

    //Several functions omitted for brevity

    public static ISession GetCurrentSession()
    {
        if(!CurrentSessionContext.HasBind(GetSessionFactory()))
            CurrentSessionContext.Bind(GetSessionFactory().OpenSession());

        return GetSessionFactory().GetCurrentSession();
    }

    public static void DisposeCurrentSession()
    {
        ISession currentSession = CurrentSessionContext.Unbind(GetSessionFactory());

        currentSession.Close();
        currentSession.Dispose();
    }
}

The key to the above is that whenever you retrieve your first session you bind it to whatever context you are using.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文