发生异常后不刷新会话 - NHibernate

2024-04-28

我正在 .NET 3.5、NHibernate 下开发一个 ASP.NET MVC Web 应用程序,并托管在 Windows Azure 上。当 web 应用程序从本地开发结构运行时,它可以正常工作。然而,当我将其移动到 Windows Azure 时,从 MVC Web 角色执行的每次插入都会出现下面列出的异常。

知道我的 NHibernate 逻辑有什么问题吗? (可能是会话管理,不确定)

[AssertionFailure:Lokad.Translate.Entities.User 条目中的 null id(发生异常后不要刷新会话)] NHibernate.Event.Default.DefaultFlushEntityEventListener.CheckId(对象obj,IEntityPersister持久器,对象id,EntityMode实体模式)+292 NHibernate.Event.Default.DefaultFlushEntityEventListener.GetValues(对象实体,EntityEntry条目,EntityMode实体模式,布尔可能BeDirty,ISessionImplementor会话)+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(执行范围,ControllerBase,对象[])+69 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContextcontrollerContext,IDictionary2 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(ControllerContextcontrollerContext,字符串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 步骤,布尔值&同步完成)+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];
        }
    }
}

在 NHibernate 事务期间,您不应该捕获异常并忽略它们。

我试着解释一下原因。

例如,可能存在由数据库中的约束引起的异常。 (它也可能是由映射问题、属性抛出的异常或其他任何原因引起的。)NHibernate 尝试将内存中的状态与数据库同步。这是在提交时完成的 - 有时在查询之前完成,以确保查询是在实际数据上完成的。当此同步失败时,数据库中的状态是随机的,一些更改会持续存在,而另一些则不会。在这种情况下,您唯一能做的就是关闭会话。

请考虑代码中的决策和计算基于内存中的值。但是 - 在忽略异常的情况下,该值不是数据库中的值,它们永远不会在那里。所以你的逻辑将决定并计算“幻想数据”。

顺便一提,捕获任何异常(无类型)并忽略它们从来都不是一个好主意。您应该始终知道您处理的异常,并确保您可以继续。

你在这里所做的就是吞掉编程错误。相信我,系统不会更稳定。问题只是:当错误发生时你是否注意到它,或者你是否忽略它甚至将错误结果保存到数据库?当您执行后者时,当您尝试从数据库获取数据时,如果数据库不一致并且出现其他错误,您不必感到惊讶。而且您永远找不到导致错误的实际原因的代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

发生异常后不刷新会话 - NHibernate 的相关文章

  • 如何在 NHibernate 命名查询参数上设置 C# 可为空值类型值?

    我正在使用 NHibernate 并通过命名查询调用存储过程
  • JQuery Mobile 与 MVC 的链接

    我正在使用 ASP NET MVC 3 和 Razor UI 设置 JQuery 移动网站 我正在生成我的链接 例如 a href See Group 2 a 假设我从 Home Index 访问它 我遇到的问题是 当我点击链接时 它会出现
  • 良好的 WiX 编辑器 [重复]

    这个问题在这里已经有答案了 我目前正在开发一个使用 WiX 创建 MSI 的项目 我过去在 Sourceforge 上使用 WiXEdit 来管理包含在 WiX 项目中的文件 因为它比直接操作 XML 稍微容易一些 但它仍然有点笨重 有谁知
  • 如何更改jqGrid的主题?

    我正在寻找更改当前版本的 jqGrid 主题的方法 我最近开始在 ASP Net MVC 2 应用程序中使用 jqGrid 并下载一些演示解决方案 项目 我尝试通过更改主题 ui javascript 来更改网格的主题 但这对我不起作用 看
  • 获取当前操作和控制器并将其用作 Html.ActionLink 中的变量?

    我需要能够动态检索您所在页面的当前操作和控制器名称 并实际使用它们创建一个新的 HTML ActionLink 链接到相同的操作和控制器名称 但位于不同的区域 所以我想我需要检索当前操作和控制器名称作为变量以用于构建新的 HTML Acti
  • SignalR 在子域上协商 404

    我创建了一个小型 MVC SignalR 应用程序 但在子域下的服务器上运行时遇到问题 http chat mydomain com http chat mydomain com 它映射到名为 chat 的文件夹 我还使用 SignalR
  • PartitionKey可以用StartsWith查询吗?

    在Azure表存储中 是否可以使用StartsWith或其他一些运算符 例如 查询PartitionKey包含等等 我知道我可以使用 RowKey 来做到这一点 但是可以使用分区键来做到这一点吗 后续问题是 即使可行 是否可取 Partit
  • 在 CSHTML 页面中实现 switch 语句

    我正在尝试做一些不同的事情 我有一个包含 ID 的视图 根据 Id 的值 我想更改显示的标题 就像是 switch id case test h1 Test Site h1 case prod h1 Prod Site h1 break 我
  • 为什么在 HQL 中直接使用列名有时只能起作用?

    我有两个 HQL 查询用于快速而肮脏的单元测试 第一个看起来有点像这样 from Foo where SOME FOREIGN KEY 42 第二个看起来像这样 from Foo as foo inner join foo Bar as b
  • WCF 5.0 和 oData 3.0 API 不适用于 Azure 表存储

    在我迁移 WCF5 0 应用程序以与 azure 集成后 我无法将 oData 3 api 与 azure 表存储一起使用 我收到这个错误 定义了类型 System Data Services Client DataServiceRespo
  • MVC 重定向到没有控制器的视图

    希望应该是一个简单的 我创建了一个通用错误视图 当整个站点的操作方法内发生异常时 我想显示该视图 我创建了一个部分页面 所有导航都位于其中 因此我不需要在此视图上使用控制器 那么如何从控制器内的操作方法重定向到它 像这样的东西 HttpPo
  • 如何在ASP.NET服务器的web.config文件中使用Azure Pipeline中设置的环境变量?

    我打算在 ASP NET 中使用 Azure Pipeline 中的以下环境变量web config file
  • jQuery UI 对话框 + 验证

    我在单击 保存 后使用 Jquery Validate 验证 jQuery UI 对话框时遇到问题 这是我创建 Jquery 对话框的代码 它从目标 href URL 加载对话框 document ready dialogForms fun
  • mvc4 捆绑包,它是如何工作的?

    在 mvc4 中 他们使用捆绑包来调用所有脚本和 css 文件一次 据我所知 调用js和cs文件时 它们的顺序很重要 如果我使用捆绑包 我如何知道捆绑包内的 css 和 js 文件的顺序是否正确 我可以定制订购吗 我现在的日期选择器有问题
  • 获取元数据活动 ADF V2

    谁能解释一下 ADF V2 中新引入的获取元数据活动有什么用 实际上 learn microsoft com 中提供的信息不足以理解此 Activity 的用途 获取元数据活动的主要目的是 验证任何数据的元数据信息 当数据准备好 可用时触发
  • 如何使用 ViewBag 创建 BaseController

    我需要执行以下操作 我已经准备好一些控制器并正在运行 但现在我想创建一个BaseController 我的每一个Controllers应该像这样继承它 public class MySecondController BaseControll
  • Windows Azure:尝试创建凭据时出现身份验证错误

    底部更新 我第一次尝试将测试应用程序上传到 Windows Azure 但在创建凭据时遇到问题 这些是我正在遵循的步骤 我在 Visual Studio 中创建凭据和证书 并将证书上传到 Azure 如下所示 在服务器资源管理器中右键单击
  • 使用 LINQ2SQL 在 ASP.NET MVC 中的各种模型存储库之间共享数据上下文

    我的应用程序中有 2 个存储库 每个存储库都有自己的数据上下文对象 最终结果是我尝试将从一个存储库检索到的对象附加到从另一个存储库检索到的对象 这会导致异常 Use 构造函数注入将 DataContext 注入每个存储库 public cl
  • Azure 辅助角色“请求输入之一超出范围”的内部异常。

    我在辅助角色中调用 CloudTableClient CreateTableIfNotExist 方法 但收到一个异常 其中包含 请求输入之一超出范围 的内部异常 我做了一些研究 发现这是由于将表命名为非法表名引起的 但是 我尝试为我的表命
  • 如何在本地运行 Microsoft Azure DocumentDB?

    我使用 Mac 主要从事 Node js 项目 我想尝试 DocumentDB 将其与 MongoDB 进行比较 有没有办法运行 Azure DocumentDB 的本地实例 而无需经历设置真实帐户的麻烦 Thanks 自2016年11月1

随机推荐

  • 如何让Python bs4在XML上正常工作?

    我正在尝试使用 Python 和 BeautifulSoup 4 bs4 将 Inkscape SVG 转换为某些专有软件的类似 XML 的格式 我似乎无法让 bs4 正确解析一个最小的示例 我需要解析器尊重自闭标签 处理 unicode
  • 值范围为 1 - 365 的正则表达式

    值范围为 1 365 的正则表达式是什么 尝试这个 1 9 d 12 d 2 3 0 5 d 36 0 5 起始锚点 和端锚 是匹配整个输入和 不仅仅是其中的一部分 是为了分组 是为了交替 1 9 d 火柴1 to 99 12 d 2 火柴
  • Sublime Text 3:如何将快捷方式绑定到特定文件扩展名?

    我想自定义快捷方式 但仅将它们应用于特定扩展 例如 jump to matching bracket gt works in JS files gt customly bound to ctrl m go to matching tag p
  • 在 C 中摆弄很多位

    我想使用二进制标志来表示 C 中的数学集合 其中 位 i 已设置 意味着 项目 i 在集合中 这很方便 因为 并集 和 交集 等操作实现起来很简单 和 但是 我希望我的集合能够包含超过 32 个项目 此外 我希望我的代码能够在 32 位和
  • 即使 cookie 在开发人员工具中列出且 httpOnly 标志设置为 false,访问 document.cookie 也会返回空字符串

    有时 访问时document cookie在登录页面中 我得到一个空字符串 即使 cookie 列在 Chrome 和 Firefox 开发者工具中 我感兴趣的 cookie 的 httpOnly 标志设置为 false 我感兴趣的 coo
  • 接收客户端返回的数据

    我使用套接字连接从服务器发送了一个缩放数组到客户端 它运行良好 现在我想将数据发送回服务器以在服务器中取消缩放 数据一次每行发送到客户端 因此我尝试将它们按顺序放回到名为 Final 的空数组中 这是服务器 py import socket
  • 应用程序负载均衡器的 SurgeQueueLength 等效项

    我希望为 AWS ECS 上运行的服务设置自动缩放 来自ECS弹性伸缩文档 https docs aws amazon com AmazonECS latest developerguide service auto scaling htm
  • 寻找支付网关[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一家支付网关公司 这样我们就可以避免繁琐的 PCI DSS 认证及其相关费用 我现在就解决这个
  • 向 yii2 活动记录模型添加不在数据库中的属性

    我有一个 mySQL 数据库 其中有一个表videos和两列 开始时间 and end time 其格式为2017 01 24 15 38 11 我有一个活动记录模型Videos延伸 yii db ActiveRecord我想添加一些数据库
  • PHP上传图片

    好吧 我在这方面投入了很多时间 我是 PHP 编程新手 并试图掌握基础知识 但我有点迷失 因为昨晚我能够获得一个 PHP 表单来将基本数据 如名称地址和其他内容 上传到我的 MySQL 服务器 但今天我说让我们进行下一步 将图像发送到服务器
  • 使用 Servlet 启动 VLC HTTP Stream 时出现问题

    我正在为自己开发一个 VLC 项目 我的目标是创建一个 HTML 前端来启动流 我通过使用 Java Servlet 来完成此操作 概述 乌班图13 04 Java 7 21 冰茶 2 3 9 Eclipse JAVAEE IDE 雄猫7
  • 汇编语言中的全局_start是什么?

    这是我的汇编级代码 section text global start start mov eax 4 mov ebx 1 mov ecx mesg mov edx size int 0x80 exit mov eax 1 int 0x80
  • 将参数传递给 psql 过程脚本

    我有一个循环命令脚本psql看起来像这样 脚本 sql DO DECLARE data rec RECORD r RECORD r2 RECORD BEGIN select mytables data id into data rec fr
  • 如何将砌体项目居中?

    我已经设置了砌体来显示项目 如下所示 list masonry itemSelector propitem columnWidth 230 这有效 但所有项目 propitem 向左浮动 例如 如果我的容器 list宽度为 600 像素 左
  • tar 命令在提取时更改所有者:组

    使用此命令提取文件时tar zxf bluez arm package tgz文件和目录的所有者 1000 组 脉冲 是 更改如下例 Example drwxrwxr x 4 1000 pulse 1024 Jul 21 00 32 dbu
  • Marionette.View 中 UI 元素的可用性

    我只是想了解 Backbone Marionette 关于 UI 元素的观点背后的决定 在现有 DOM 元素上实例化 Marionette View 时 如下所示 view new Marionette ItemView el elemen
  • T-SQL 跳过获取存储过程

    我在这个网站上似乎运气不太好 但我仍然是个乐观主义者 我会继续努力 我有两个表 期刊和文章类别 使用此查询连接 SELECT Journals JournalId Journals Year Journals Title ArticleCa
  • 在 Prolog 中动态拆分列表

    我从序言开始几周 但我看到了更深入的操作列表的递归谓词的构造 我的问题是 是否可以构建一个谓词 将给定列表拆分为给定数量的其他列表 比如我想象的 split H T NumberLists Lists 递归实现 split 1 2 3 4
  • 隐藏 asp 单选按钮文本

    我有一个 asp 单选按钮 我想在 javascript 中将其可见性设置为 false
  • 发生异常后不刷新会话 - NHibernate

    我正在 NET 3 5 NHibernate 下开发一个 ASP NET MVC Web 应用程序 并托管在 Windows Azure 上 当 web 应用程序从本地开发结构运行时 它可以正常工作 然而 当我将其移动到 Windows A