我正在.NET 3.5,NHibernate下開發一個ASP.NET MVC Web應用程序,並託管在Windows Azure上。什麼時候,webapp是從本地開發結構運行的,它工作正常。但是,當我將它移動到Windows Azure時,從MVC Web角色執行的每個插入都會以下面列出的例外結束。在發生異常之後不要刷新會話 - NHibernate
任何想法我的NHibernate邏輯有什麼問題? (可能是會話管理,不知道)
[AssertionFailure:在Lokad.Translate.Entities.User進入空ID(發生異常後不要衝洗會議)] NHibernate.Event.Default。 DefaultFlushEntityEventListener.CheckId(obj對象,IEntityPersister留存,對象ID,EntityMode entityMode)+292 NHibernate.Event.Default.DefaultFlushEntityEventListener.GetValues(對象實體,EntityEntry項,EntityMode entityMode,布爾mightBeDirty,ISessionImplementor會話)+93 NHibernate.Event .Default.DefaultFlushEntityEventListener.OnFlushEntity(FlushEntityEvent event)+158 NHibernate.Event.Default.AbstractFlushingEventListener.FlushEntities(FlushEvent event)+469 NHibernate.Event.Default.AbstractFlushingEventListener.FlushEverythingToExecutions(FlushEvent事件)339 NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent事件)85 NHibernate.Impl.SessionImpl.Flush()275 NHibernate.Transaction.AdoTransaction .Commit()236 Lokad.Translate.Repositories.PageRepository.Create(頁頁) Lokad.Translate.Controllers.PagesController.Create(頁頁) lambda_method(ExecutionScope,ControllerBase,對象[])69 系統。 Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext,IDictionary
2 parameters) +251 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary
2 parameters)+31 System.Web.Mvc。 <> c__DisplayClassa.b__7()88 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter濾波器,ActionExecutingContext preContext,函數功能1 continuation) +534 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList
1個濾波器,ActionDescriptor actionDescriptor,IDictionary`2參數)312 System.Web.Mvc.ControllerActionInvoker。 InvokeAction(ControllerContext controllerContext,String 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(IExecutionStep step,布爾型& completedSynchronously已完成)+177
請注意,我用的_session.FlushMode = FlushMode.Commit;
,而且User
在自定義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];
}
}
}
嗨斯蒂芬,非常感謝您的詳細解釋。我終於找到了一個解決方案。問題與你的解釋無關,但它仍然是一個很好的觀點。 – 2009-11-30 22:01:36
非常感謝你的詳細解釋我有同樣的錯誤,它是由吞噬NHibernate異常造成的。我通過閱讀您的文章節省了大量時間。 – Vladimirs 2013-05-01 15:14:20