asp.net-mvc – 发生异常后不要刷新会话 – NHibernate
我正在开发.NET 3.5,NHibernate和托管在
Windows Azure上的ASP.NET MVC Web应用程序.什么时候,webapp从本地开发结构运行,它工作正常.但是,当我将其移动到Windows Azure时,从MVC Web角色执行的每个插入都会以下面列出的异常结束.
知道我的NHibernate逻辑有什么问题吗? (可能是会话管理,不确定)
请注意,我使用的是_session.FlushMode = FlushMode.Commit;并且用户在自定义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]; } } } 解决方法
在NHibernate事务期间,您永远不应该捕获异常并忽略它们.
我试着解释原因. 例如,可能存在由数据库中的约束引起的异常. (它也可能是由映射问题,属性或其他任何东西引发的异常引起的.)NHibernate尝试将内存中的状态与数据库同步.这是在提交时完成的 – 有时在查询之前完成,以确保对实际数据进行查询.当此同步失败时,数据库中的状态是随机的,某些更改会保留,而其他更改则不会.在这种情况下,你唯一能做的就是关闭会话. 请考虑代码中的决策和计算基于内存中的值.但是 – 如果忽略异常,这个值不是数据库中的值,它们永远不会存在.因此,您的逻辑将决定并计算“幻想数据”. 顺便说一句,捕获任何异常(无类型)并忽略它们永远不是一个好主意.您应该始终知道您处理的例外情况,并确保可以继续. 你在这里做的是吞咽编程错误.相信我,系统将不会更稳定.问题只是:你是否注意到它发生时的错误,或者你是否忽略它,甚至将错误的结果保存到数据库中?当你执行后者时,当数据库不一致时,你不必感到惊讶,当你试图从数据库中获取数据时会出现其他错误.而且你永远不会找到导致错误的实际原因的代码. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 深入理解C# 3.x的新特性(5):Object Initializer 和 Coll
- 如何实现像WCF一样的Asp.net MVC OneWay / FireAndForget调
- asp.net-mvc – 将大型实体列表映射到ViewModels的PagedLis
- 什么用于ASP.NET的成员资格
- asp.net – 什么Jenkins插件可以用于.NET网站部署?
- Asp.Net 5核心1.0不兼容/模板未找到
- 为什么我需要在ASP.NET控件上调用处理?
- AllowOnlyAlphanumericUserNames – 如何设置? (RC到RTM破
- asp.net-mvc – Breeze.js失败,无法加载文件或程序集System
- asp.net-mvc – asp.net mvc windows authentication – 以
- asp.net – 解析接受标题
- 如何在ASP.NET网页中嵌入代码块?
- asp.net-mvc – 将项目从ASP.NET MVC1迁移到ASP.
- asp.net-mvc-3 – 在ASP.NET MVC中,“<%=”,“<
- asp-classic – 在Classic ASP中列出文件夹结构
- asp.net-web-api – 用于自托管模式的WebApi按请
- if-statement – 如何在VBScript for Classic-AS
- asp.net-mvc – Unity使用参数将依赖项注入MVC??
- .Net Core微服务入门全纪录(一)——项目搭建
- asp.net-mvc – 如果Hangfire已经运行,请停止启动