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尝试将内存中的状态与数据库同步.这是在提交时完成的 – 有时在查询之前完成,以确保对实际数据进行查询.当此同步失败时,数据库中的状态是随机的,某些更改会保留,而其他更改则不会.在这种情况下,你唯一能做的就是关闭会话. 请考虑代码中的决策和计算基于内存中的值.但是 – 如果忽略异常,这个值不是数据库中的值,它们永远不会存在.因此,您的逻辑将决定并计算“幻想数据”. 顺便说一句,捕获任何异常(无类型)并忽略它们永远不是一个好主意.您应该始终知道您处理的例外情况,并确保可以继续. 你在这里做的是吞咽编程错误.相信我,系统将不会更稳定.问题只是:你是否注意到它发生时的错误,或者你是否忽略它,甚至将错误的结果保存到数据库中?当你执行后者时,当数据库不一致时,你不必感到惊讶,当你试图从数据库中获取数据时会出现其他错误.而且你永远不会找到导致错误的实际原因的代码. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – IIS作为反向代理 – 从后端服务器压缩重写的响应
- asp.net-mvc-3 – DI模式是否限制了昂贵的对象创建以及不经
- asp.net-mvc – ASP.NET MVC – 在客户端缓存页面
- 在为ASP.net构建期间缩小内联JavaScript?
- asp.net-mvc-3 – 如何从控制器外部访问登录用户?
- asp.net – 实体框架删除子对象
- Razor页面在运行时无法在ASP.NET Core RC2中看到引用的类库
- 我应该在ASP.NET MVC中构建我的下一个Web应用程序吗?
- asp.net-mvc – 将HttpRequestMessage转换为HttpRequest
- asp.net – 菜单控件生成的js导致Web窗体中的Sys未定义的异
- asp.net – MVC ViewModel错误 – 没有为此对象定
- asp.net – IE10中的LinkButtons不执行回发
- 为什么VS 2013将ASP.NET MVC 4 web.config复制到
- controls – mvc显示模板中当前项的索引
- asp.net – DOM异常:INVALID_CHARACTER_ERR(5)[
- SqlServer如何给表添加新的字段以及字段注释
- asp.net-core – 编译netcoreapp1.0,代码包含#if
- asp.net-vnext中的旧程序集引用错误
- asp.net-mvc – 使用ASP.NET MVC中绝对路径访问视
- 如何在使用ASP.NET MVC的jQuery AJAX调用中触发“
