Estoy desarrollando una aplicación web ASP.NET MVC en .NET 3.5, NHibernate y alojada en Windows Azure. Cuando, la aplicación web se ejecuta desde el tejido de desarrollo local, funciona bien. Sin embargo, cuando lo muevo a Windows Azure, cada inserción realizada desde el rol web de MVC termina con la excepción que se detalla a continuación.No vacíe la sesión después de una excepción - NHibernate
¿Alguna idea de cuál es el problema con mi lógica de NHibernate? (Que podría ser la gestión de sesiones, no estoy seguro)
[AssertionFailure: id nulo en la entrada Lokad.Translate.Entities.User (No echar la sesión después de que ocurre una excepción)] NHibernate.Event.Default. DefaultFlushEntityEventListener.CheckId (Object obj, IEntityPersister persister, ID del objeto, EntityMode EntityMode) +292 ( NHibernate.Event.Default.DefaultFlushEntityEventListener.GetValues entidad objeto, entrada EntityEntry, EntityMode EntityMode, Boolean mightBeDirty, sesión ISessionImplementor) 93 NHibernate.Event .Default.DefaultFlushEntityEventListener.OnFlushEntity (evento FlushEntityEvent) +158 NHibernate.Event.Default.AbstractFlushingEventListener.FlushEntities (evento FlushEvent) +469 NHibernate.Event.Default.AbstractFlushingEventListener.FlushEverythingToExecutions (FlushEvent evento) 339 (evento FlushEvent) NHibernate.Event.Default.DefaultFlushEventListener.OnFlush 85 NHibernate.Impl.SessionImpl.Flush() 275 NHibernate.Transaction.AdoTransaction .Commit() 236 Lokad.Translate.Repositories.PageRepository.Create (página) Lokad.Translate.Controllers.PagesController.Create (página) lambda_method (ExecutionScope, ControllerBase, Object []) 69 sistema. Web.Mvc.ReflectedActionDescriptor.Execute (ControllerContext controllerContext, IDictionary
2 parameters) +251 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary
2 parámetros) +31 System.Web.Mvc. <> c__DisplayClassa.b__7() 88 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter (filtro IActionFilter, ActionExecutingContext preContext, Func1 continuation) +534 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList
1 filtros, ActionDescriptor ActionDescriptor, parámetros IDictionary`2) 312 System.Web.Mvc.ControllerActionInvoker. InvokeAction (ControllerContext ControllerContext, cadena actionName) 856 System.Web.Mvc.Controller.ExecuteCore() 185 System.Web.Mvc.MvcHandler.ProcessRequest (HttpContextBase HttpContext) 221 System.Web.CallHandlerExecutionStep.System.Web .HttpApplication.IExecutionStep.Execute() +586 System.Web.HttpApplication.ExecuteStep (paso IExecutionStep, Boolean & completado de forma sincrónica) +177
Tenga en cuenta que estoy usando _session.FlushMode = FlushMode.Commit;
y que el User
se utiliza en una costumbre RoleProvider
public class SimpleRoleProvider : RoleProvider
{
readonly UserRepository Users = new UserRepository();
public override string[] GetRolesForUser(string username)
{
try
{
var user = Users.Get(username);
// no role if user is not registered
if (null == user) return new string[0];
// default role for registered user
return user.IsManager ? new[] { "Manager", "User" } : new[] { "User" };
}
catch (Exception)
{
// role should not fail in case of DB issue.
return new string[0];
}
}
}
Hola Stefan, muchas gracias por su explicación detallada. Finalmente encontré una solución. El problema no estaba relacionado con tu explicación, pero aún así es un gran punto. –
Muchas gracias por la explicación tan detallada que tuve el mismo error y fue causado al tragar la excepción de NHibernate. Ahorré mucho tiempo leyendo tu publicación. – Vladimirs