Subsonic 如何处理连接?

2024-01-13

在 Nhibernate 中,您可以通过在 BeginRequest 期间创建会话来启动会话,并在 结束请求

public class Global: System.Web.HttpApplication
{
    public static ISessionFactory SessionFactory = CreateSessionFactory();

    protected static ISessionFactory CreateSessionFactory()
    {
        return new Configuration()
            .Configure(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "hibernate.cfg.xml"))
            .BuildSessionFactory();
    }

    public static ISession CurrentSession
    {
        get{ return (ISession)HttpContext.Current.Items["current.session"]; }
        set { HttpContext.Current.Items["current.session"] = value; }
    }

    protected void Global()
    {
        BeginRequest += delegate
        {
            CurrentSession = SessionFactory.OpenSession();
        };
        EndRequest += delegate
        {
            if(CurrentSession != null)
                CurrentSession.Dispose();
        };
    }
}

亚音速中的等效项是什么?

据我了解,Nhibernate 将在结束请求时关闭所有连接。

Reason:在解决 Subsonic 项目中的一些遗留代码问题时,我遇到了很多 MySQL 超时,这表明代码没有关闭连接

MySql.Data.MySqlClient.MySqlException: 连接错误:超时已到。这 超时时间之前已过 从池中获取连接。 发生这种情况可能是因为所有 池连接正在使用且最大 已达到池大小。生成时间:周二, 2009 年 8 月 11 日 05:26:05 GMT System.Web.HttpUnhandledException: 类型异常 'System.Web.HttpUnhandledException' 被扔了。 ---> MySql.Data.MySqlClient.MySqlException: 连接错误:超时已到。 超时时间之前已过 从池中获取连接。 发生这种情况可能是因为所有 池连接正在使用且最大 已达到池大小。在 MySql.Data.MySqlClient.MySqlPool.GetConnection() 在 MySql.Data.MySqlClient.MySqlConnection.Open() 在 SubSonic.MySqlDataProvider.CreateConnection(字符串 新连接字符串)在 SubSonic.MySqlDataProvider.CreateConnection() 在 SubSonic.AutomaticConnectionScope..ctor(DataProvider 提供商)在 SubSonic.MySqlDataProvider.GetReader(QueryCommand qry)在 SubSonic.DataService.GetReader(QueryCommand cmd)在 SubSonic.ReadOnlyRecord`1.LoadByParam(String 列名称、对象参数值)

我的连接字符串如下

<connectionStrings>
    <add name="xx" connectionString="Data Source=xx.net; Port=3306; Database=db; UID=dbuid; PWD=xx;Pooling=true;Max Pool Size=12;Min Pool Size=2;Connection Lifetime=60" />
  </connectionStrings>

除非您专门用“SharedDbConnectionScope”包装您的内容,否则它始终是一次性的。我以前见过这种情况 - 特别是在 Windows 上测试 MySQL 时 - 问题是 MySQL 驱动程序有缺陷并且不会关闭连接。

我能够通过创建一个控制台应用程序和一个基本阅读器然后循环它来重现这一点 - bam。连接池错误。

我知道,没有太多答案,但你能做什么。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Subsonic 如何处理连接? 的相关文章

随机推荐