【发布时间】:2009-11-30 10:36:30
【问题描述】:
我正在开发一个基于 .NET 3.5、NHibernate 并托管在 Windows Azure 上的 ASP.NET MVC Web 应用程序。当 web 应用程序从本地开发结构运行时,它可以正常工作。然而,当我将它移动到 Windows Azure 时,从 MVC Web 角色执行的每个插入都以下面列出的异常结束。
知道我的 NHibernate 逻辑有什么问题吗? (可能是会话管理,不确定)
[AssertionFailure:Lokad.Translate.Entities.User 条目中的空 id(发生异常后不刷新 Session)] NHibernate.Event.Default.DefaultFlushEntityEventListener.CheckId(对象 obj,IEntityPersister 持久化,对象 id,EntityMode entityMode)+292 NHibernate.Event.Default.DefaultFlushEntityEventListener.GetValues(Object entity, EntityEntry entry, EntityMode entityMode, Boolean mightBeDirty, ISessionImplementor session) +93 NHibernate.Event.Default.DefaultFlushEntityEventListener.OnFlushEntity(FlushEntityEvent 事件) +158 NHibernate.Event.Default.AbstractFlushingEventListener.FlushEntities(FlushEvent 事件)+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, Object[]) +69 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary
2 parameters) +251 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary2 参数) +31 System.Web.Mvc.c__DisplayClassa.b__7() +88 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter 过滤器,ActionExecutingContext preContext,Func1 continuation) +534 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList1 过滤器,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, Boolean& 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];
}
}
}
【问题讨论】:
标签: asp.net-mvc nhibernate azure