In Nhibernate starten Sie eine Sitzung, indem sie es während einer Beginrequest und in der Nähe bei EndrequestWie funktioniert Subsonic Verbindungen?
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();
};
}
}
Was ist das Äquivalent in Subsonic zu schaffen?
So wie ich es verstehe, wird Nhibernate alle Verbindungen bei endrequest schließen.
Grund: Während Mühe einige Legacy-Code in einem Subsonic Projekt Schießen ich viele MySQL erhalten Timeouts was darauf hindeutet, dass der Code nicht die Verbindungen
endetMySql.Data.MySqlClient.MySqlException : Fehler beim Verbinden: Timeout abgelaufen. Die Timeout-Zeit ist vor verstrichen, um eine Verbindung vom Pool zu erhalten. Dies ist möglicherweise aufgetreten, weil alle gepoolten Verbindungen verwendet wurden und die Poolgröße erreicht wurde. Generiert: Di 11. August 2009 05.26.05 GMT System.Web.HttpUnhandledException: Ausnahme vom Typ 'System.Web.HttpUnhandledException' wurde geworfen. ---> MySql.Data.MySqlClient.MySqlException: Fehler beim Verbinden: Timeout abgelaufen. Das Zeitlimit ist vor abgelaufen, um eine Verbindung vom Pool zu erhalten. Dies ist möglicherweise aufgetreten, weil alle gepoolten Verbindungen verwendet wurden und die Poolgröße erreicht wurde. bei MySql.Data.MySqlClient.MySqlPool.GetConnection() bei MySql.Data.MySqlClient.MySqlConnection.Open() bei SubSonic.MySqlDataProvider.CreateConnection (String newConnectionString) bei SubSonic.MySqlDataProvider.CreateConnection() bei SubSonic.AutomaticConnectionScope..ctor (DataProvider- Provider) bei SubSonic.MySqlDataProvider.GetReader (QueryCommand qry) bei SubSonic.DataService.GetReader (QueryCommand cmd) bei SubSonic.ReadOnlyRecord`1.LoadByParam (String column , Objekt paramValue)
Meine Verbindungszeichenfolge ist wie folgt
<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>
Rob, ich habe diesen Teil nicht verstanden = "Es ist immer ein einmaliger Versuch, es sei denn du Umhüllen Sie Ihre Sachen speziell mit einem "SharedDbConnectionScope". ". Wie mache ich das?. Kannst du mich auf ein Beispiel hinweisen? –
Schauen Sie hier http://subsonicproject.com/docs/3.0_Transactions –
Also wenn ich nicht viele Verbindungen öffnen und schließen möchte, muss ich dieses SharedDbConnectionScope verwenden? Das scheint ziemlich wichtig zu sein !! Weißt du, ob ich noch ein TransactionScope brauche, wenn mir Transaktionen egal sind? – Rory