erka skrev:
Lazy load fungerar via en proxy, stänger du din session för tidigt?
Session stängs i application_endrequest vilket väl bör vara ok?!
erka skrev:
Session per request? Session per conversion?
Hmm, jag vet inte vad det kallas. Använder denna hjälpklass:
public sealed class NHibernateHelper
{
private const string CurrentSessionKey = "nhibernate.current_session";
private static readonly ISessionFactory sessionFactory;
static NHibernateHelper()
{
//log4net.Config.XmlConfigurator.Configure();
NHibernate.Cfg.Environment.UseReflectionOptimizer = true;
sessionFactory = new NHibernate.Cfg.Configuration().Configure().BuildSessionFactory();
}
public static ISession GetCurrentSession()
{
HttpContext context = HttpContext.Current;
ISession currentSession = context.Items[CurrentSessionKey] as ISession;
if (currentSession == null)
{
currentSession = sessionFactory.OpenSession();
context.Items[CurrentSessionKey] = currentSession;
}
return currentSession;
}
public static void CloseSession()
{
HttpContext context = HttpContext.Current;
ISession currentSession = context.Items[CurrentSessionKey] as ISession;
if (currentSession == null)
{
return;
}
currentSession.Close();
context.Items.Remove(CurrentSessionKey);
}
public static void CloseSessionFactory()
{
if (sessionFactory != null)
{
sessionFactory.Close();
}
}
}
Och sen stänger jag som sagt via en httpmodul i app endrequest.
erka skrev:
Du försöker inte köra det under medium trust, lazy-load i nhibernate fungerar inte då out of the box.
Jag kör på binero. De använder en modifierad medium trust config som bla. tillåter reflection. Jag har fått för mig att det ska fungera på binero men jag kan ha fel!?
Nickemannen skrev:
Hmm, är det en ASP.NET application? isf tycker jag currentuser som static ser farlig ut.
Loada current user tidigt och lägg i HttpContext
Japp, asp.net app.
CurrentUser hämtas via CurrentUserName som ser ut så här:
public static string CurrentUserName
{
get
{
if (HttpContext.Current.User != null)
return HttpContext.Current.User.Identity.Name;
return string.Empty;
}
}
Det borde väl vara safe att göra så?
Nickemannen skrev:
Tror egentligen inte du förlorar något direkt på att ladda rollerna också? eller innehåller de i sin tur flera olika objekt som måste laddas?
Ja, rollerna innehåller i sin tur ett par collections. CurrentUser innehåller även andra collections förutom rollerna så jag måste lista ut detta ska fungera. Eftersom jag tidigare inte sparat undan CurrentUser så är det typ så jag laddat allt tidigare, dvs. helt utan lazy eftersom CurrentUser hämtats om från databasen när den behövts vilket gjort appen tokseg!
Nickemannen skrev:
Sedan kan du också lagra din Session i httpcontext som initieras när anropet kommer och förstörs när anropet avslutas finns massor av kod för det att hitta.
Det är exakt vad jag gör också! :)
En dum fråga bara:
Felet uppstår inte pga. att jag hämtar CurrentUser static och lagrar den i ett static fält?
Kan det statiska fälet få problem att hämta en collection lazy då?