c# - Nested NHibernateFacility SessionManager.OpenSession calls -


i feel i'm misunderstanding something. @ following code. have defaultsessionlifestyleoption.sessionpertransaction set, sessions have different session ids though they're in same transaction. expected 1 session, there's two.

what doing wrong, , how make want? should instead inject isession program , have methods use session? won't lose benefits of sessionmanager autotxfacility?

using castle.facilities.autotx; using castle.facilities.factorysupport; using castle.facilities.nhibernate; using castle.facilities.typedfactory; using castle.microkernel.registration; using castle.transactions; using castle.windsor; using fluentnhibernate.cfg; using fluentnhibernate.cfg.db; using nhibernate; using system; using system.transactions;  namespace sandbox {     public class dbinstaller : inhibernateinstaller     {         public fluentconfiguration buildfluent()         {             return fluently.configure()                 .database(mssqlconfiguration.mssql2008.connectionstring("server=localhost;integrated security=true;"));         }          public maybe<iinterceptor> interceptor { { return maybe.none<iinterceptor>(); } }         public bool isdefault { { return true; } }         public void registered(isessionfactory factory) { }         public string sessionfactorykey { { return "foo"; } }     }      public class program     {         public isessionmanager sessionman { get; set; }          static void main(string[] args)         {             iwindsorcontainer container = new windsorcontainer();             container                 .register(component.for<inhibernateinstaller>().implementedby<dbinstaller>())                 .addfacility<factorysupportfacility>()    // used autotxfacility, dont use directly @ time                 .addfacility<typedfactoryfacility>()      // used autotxfacility, we're using somewhere                 .addfacility<autotxfacility>()            // automatically manages db transactions us, if want.                 .addfacility<nhibernatefacility>(x => x.defaultlifestyle = defaultsessionlifestyleoption.sessionpertransaction)                 .register(                     component.for<program>().implementedby<program>().lifestyletransient());              var p = container.resolve<program>();             p.foo();         }          [transaction(transactionscopeoption.required)]         public virtual void foo()         {             using (var session = sessionman.opensession())             {                 console.writeline("foo: {0}", ((nhibernate.impl.sessionimpl)session).sessionid);                 bar();             }         }          public virtual void bar()         {             using (var session = sessionman.opensession())             {                 console.writeline("bar: {0}", ((nhibernate.impl.sessionimpl)session).sessionid);             }         }     } } 


Comments

Popular posts from this blog

ios - iPhone/iPad different view orientations in different views , and apple approval process -

java Extracting Zip file -

C# WinForm - loading screen -