2008-12-12 12 views
1

Description du problème: Ce modèle fonctionne correctement avec un utilisateur à la fois. Dès que je reçois plusieurs utilisateurs à la fois, je reçois un sérieux d'erreurs liées à ne pas fermer mon SqlDataReader. Quand je désactive le chargement paresseux comme ceci:ASP.NET, Ninject et MVC: Problèmes de charge de performance

persistenceModel.Conventions.OneToManyConvention = (prop => prop.SetAttribute ("paresseux", "faux"));

C'est bon, mais les performances sont lentes. Cela utilise MVC Beta 1

Des pensées? Ci-dessous, j'ai un extrait de mon ASAX global ainsi que mon code d'initialisation SessionFactory.

*********** C'EST DANS MON Global.asax ********

public class MvcApplication : NinjectHttpApplication 
{ 
    public static IKernel Kernel { get; set; } 

    protected override void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
     //routes.IgnoreRoute("WebServices/*.asmx"); 

     routes.MapRoute("CreateCategoryJson", "Admin/CreateCategoryJson/{categoryName}"); 
     routes.MapRoute("User", "Admin/User/{username}", new { controller="Admin", action="user" }); 

     routes.MapRoute(
      "Default",            // Route name 
      "{controller}/{action}/{id}",       // URL with parameters 
      new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
     ); 

    } 

    protected void Session_Start(object sender, EventArgs e) 
    { 
     if (Session["rSkillsContext"] == null) 
     { 
      string logonName = this.User.Identity.Name.Replace("NUSOFTCORP\\", string.Empty); 
      rSkillsContext context = new rSkillsContext(logonName); 
      Session.Add("rSkillsContext", context); 
     } 
    } 

    protected override IKernel CreateKernel() 
    { 
     log4net.Config.XmlConfigurator.Configure(); 
     Kernel = new StandardKernel(new RepositoryModule(), new AutoControllerModule(Assembly.GetExecutingAssembly()), new Log4netModule()); 
     return Kernel; 
    } 
} 

***** Ceci est mon NHibernateHelper.cs ** ****

private ISessionFactory CreateSessionFactory() 
    { 
     var configuration = MsSqlConfiguration 
           .MsSql2005 
           .ConnectionString.FromConnectionStringWithKey("ConnectionString") 
           .ShowSql() 
           .Raw("current_session_context_class", "web") 
           .ConfigureProperties(new Configuration()); 

     var persistenceModel = new PersistenceModel(); 

     persistenceModel.Conventions.GetForeignKeyName = (prop => prop.Name + "ID"); 
     persistenceModel.Conventions.GetForeignKeyNameOfParent = (prop => prop.Name + "ID"); 
     // HACK: changed lazy loading 
     persistenceModel.Conventions.OneToManyConvention = (prop => prop.SetAttribute("lazy", "false")); 

     persistenceModel.addMappingsFromAssembly(Assembly.Load(Assembly.GetExecutingAssembly().FullName)); 
     persistenceModel.Configure(configuration); 

     return configuration.BuildSessionFactory(); 
    } 

Répondre

1

Il semblerait que vous n'ayez pas disposé votre session correctement (j'ai eu la même erreur avec Ninject et NHibernate il y a un mois). Il doit être démarré au début de la demande et doit être éliminé à la fin. Pourriez-vous s'il vous plaît fournir des morceaux de code où vous commencez et disposez de votre session nhibernate?