Note that there are some explanatory texts on larger screens.

plurals
  1. POCastle Windsor Nhibernate Facility Lazy loading
    primarykey
    data
    text
    <p>I am migrating my mvc web app to use Nhibernate Facility to manage Nhibernate sessions.</p> <p>I am encountering this strange problem;</p> <p>When I register SessionWebModule under web.config/ httpmodules via:</p> <pre><code>&lt;add name="NHibernateSessionWebModule" type="Castle.Facilities.NHibernateIntegration.Components.Web.SessionWebModule, Castle.Facilities.NHibernateIntegration" /&gt; </code></pre> <p>System is unable to lazy load objects. I get no session exception.</p> <p>If I don't add this to web.config lazy loading is working fine. Everything part from this seems to be OK as far as regitering Windsor container and registering Nhibernate Facility goes. Nhibernate Facility is able to provide session manager and Windsor container is able to resolve objects.</p> <p>Ofcourse, without SessionWebModule Nhibernate Facility is near useless for me as in this situation it is not able to properly manage sessions. I see datareader is allready open type exceptions which are no good..</p> <p>I am stuck and need to urgently get past this problem I will appreciate any help from you.</p> <p>I am including below some sections of my configuration and code to give more information</p> <p>Web.config:</p> <pre><code>&lt;castle&gt; &lt;facilities&gt; &lt;facility id="nhibernatefacility" isWeb="false" type="Castle.Facilities.NHibernateIntegration.NHibernateFacility, Castle.Facilities.NHibernateIntegration"&gt; &lt;factory id="nhibernate.factory"&gt; &lt;settings&gt; &lt;item key="connection.provider"&gt;NHibernate.Connection.DriverConnectionProvider&lt;/ item&gt; &lt;item key="connection.driver_class"&gt;NHibernate.Driver.SqlClientDriver&lt;/item&gt; &lt;item key="connection.connection_string"&gt;Data Source=zzz;Database=xxx;Trusted_Connection=True;&lt;/item&gt; &lt;item key="dialect"&gt;NHibernate.Dialect.MsSql2005Dialect&lt;/item&gt; &lt;item key="proxyfactory.factory_class"&gt;NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu&lt;/item&gt; &lt;/settings&gt; &lt;assemblies&gt; &lt;assembly&gt;AppWeb.Domain&lt;/assembly&gt; &lt;/assemblies&gt; &lt;/factory&gt; &lt;/facility&gt; &lt;/facilities&gt; &lt;/castle&gt; &lt;system.webServer&gt; &lt;validation validateIntegratedModeConfiguration="false" /&gt; &lt;modules runAllManagedModulesForAllRequests="true"&gt; &lt;add name="NHibernateSessionWebModule" type="Castle.Facilities.NHibernateIntegration.Components.Web.SessionWebModule, Castle.Facilities.NHibernateIntegration" /&gt; &lt;/modules&gt; &lt;/sytem.webServer&gt; </code></pre> <p>Global.asax</p> <pre><code>public class MvcApplication : System.Web.HttpApplication, IContainerAccessor { private static IWindsorContainer container; public IWindsorContainer Container { get { return container; } } void Application_Error(Object sender, EventArgs e) { Logger.Error(Server.GetLastError()); } public static void RegisterRoutes(RouteCollection routes) { #region Ignores routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.IgnoreRoute("admin/{*url}"); #endregion routes.MapRoute( "Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Main", id = "" }, new { controller = @"[^\.]*" } ); } protected void Application_Start() { RegisterRoutes(RouteTable.Routes); log4net.Config.XmlConfigurator.Configure(); SetupWindsor(); } private void SetupWindsor() { container = new WindsorContainer(new XmlInterpreter()); container.Register( AllTypes .FromAssemblyContaining&lt;UserRepository&gt;() .Where(t =&gt; t.Name.EndsWith("Repository", StringComparison.Ordinal)) .WithService .FirstInterfaceOnType() .Configure(r =&gt; r.LifeStyle.PerWebRequest), AllTypes.FromAssembly(Assembly.GetExecutingAssembly()) .BasedOn&lt;IController&gt;() .Configure(c =&gt; c.LifeStyle.PerWebRequest), ); //.AddFacility&lt;TransactionFacility&gt;(); ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(container)); } } </code></pre> <p>Lazy loading exception:</p> <p>[LazyInitializationException: Initializing[AppWeb.Domain.City#31135]- Could not initialize proxy - no Session.] NHibernate.Proxy.AbstractLazyInitializer.Initialize() +138 NHibernate.Proxy.AbstractLazyInitializer.GetImplementation() +37 NHibernate.ByteCode.LinFu.LazyInitializer.Intercept(InvocationInfo info) +72 CityProxy.get_Name() +143 ASP.views_tour_filters_ascx.__Render__control1(HtmlTextWriter __w, Control parameterContainer) in c:\wwwroot\AppWeb\AppWeb.Web\Views\Tour \Filters.ascx:14 System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +256 System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +19 System.Web.UI.Control.Render(HtmlTextWriter writer) +10 System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27 System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +99 System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25 System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +134 System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +19 System.Web.UI.Page.Render(HtmlTextWriter writer) +29 System.Web.Mvc.ViewPage.Render(HtmlTextWriter writer) +59 System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27 System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +99 System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1266 </p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload