В Nhibernate вы начинаете сеанс, создавая его во время запроса BeginRequest и закрывая в
EndRequest
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();
};
}
}
Что эквивалентно в Subsonic?
Насколько я понимаю, Nhibernate закроет все соединения в конце запроса.
Причина: Во время проблем со стрельбой из устаревшего кода в проекте Subsonic я получаю много тайм-аутов MySQL, предполагая, что код не закрывает соединения
MySql.Data.MySqlClient.MySqlException:
ошибка подключения: истекло время ожидания.
тайм-аут истек до
получение соединения из пула.
Это могло произойти, потому что все
пулы соединений использовались и макс
Размер бассейна был достигнут. Сгенерировано: вт,
11 августа 2009 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 (String
newConnectionString) в
SubSonic.MySqlDataProvider.CreateConnection ()
в
SubSonic.AutomaticConnectionScope..ctor (DataProvider
поставщик) в
SubSonic.MySqlDataProvider.GetReader (QueryCommand
кри) в
SubSonic.DataService.GetReader (QueryCommand
cmd) в
SubSonic.ReadOnlyRecord`1.LoadByParam (String
columnName, Object paramValue)
Моя строка подключения выглядит следующим образом
<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>