发生异常后不刷新会话 - 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 的相关文章

  • 在 Visual Studio 中将域名从 localhost 更改为自定义名称

    我是 MVC 新手 我刚刚在 VS 2010 中创建了一个 MVC4 测试项目 它运行正常 但 url 是http 本地主机 60826 http localhost 60826 我想把它改成http my test site http m
  • 无法访问集群端点,请检查是否存在连接/防火墙/DNS 问题

    我目前正在研究云技术 在我当前的一个项目中 我在 Azure 中创建了服务结构集群 然后我尝试通过 Windows PowerShell 连接到集群 我收到错误 无法访问集群端点 请检查是否存在连接 防火墙 DNS 问题 请告诉我如何解决上
  • ASP MVC.NET3 本地 IIS7 对象引用错误

    在开发 mvc Web 应用程序期间 我遇到了运行站点本地实例的问题 当我尝试重新加载页面时 在首次加载成功后 我看到以下错误 如果我通过 VS 虚拟服务器运行该站点 则不会出现任何问题 我的应用程序池正在集成模式下运行 并且正在运行 ne
  • 实体框架获取前 10 行

    我在 SQL 数据库中有 3 个表 tbl视频 VideoID int PK Title varchar 100 Decription varchar 100 tblTags TagID int PK TagText varchar 100
  • 禁用 Azure 应用服务上的某些 W3C 日志记录字段

    在 Azure 应用服务中记录 Web 服务器日志时 默认情况下会记录每个字段 并且似乎没有任何方法可以禁用特定字段 有没有解决的办法 或者我错过了什么 只要 applicationhost config 中的 IIS 支持 您就可以使用X
  • 如何在 NHibernate 中自动生成 ID

    如何让 NHibernate 自动生成表的唯一 ID ID 可以是任意的long值 只要每个值仅使用一次 我当前的映射如下所示
  • 设置存储在 Blob 上的媒体文件的内容类型

    我们有一个托管在 Azure 上的网站 它是基于媒体的 我们使用 JWPlayer 通过 HTTP 伪流来播放媒体 媒体文件以 3 种格式存储在 blob 上 mp4 ogg webm 问题是所有类型的媒体文件的内容类型都设置为应用程序 八
  • 如何将模型包含在 RedirectToAction 中?

    In the RedirectToAction下面 我想通过一个viewmodel 如何将模型传递给重定向 我设置了一个断点来检查模型的值 以验证模型是否正确创建 这是正确的 但生成的视图不包含模型属性中找到的值 model created
  • 为什么 Visual Studio 不移动发布中的某些文件?

    当我尝试发布项目时 Visual Studio 不会将某些文件移动到目标发布文件夹 目前我有这个问题 json文件 我正在使用 Visual Studio 2010 和 MVC4 是否有关于应发布哪些文件或 mime 类型并将其移动到目标文
  • NHibernate 忽略长度属性

    运行 SQL Profiler 后 我意识到 NHibernate 正在将字符串映射到nvarchar 4000 我通过指定修复了它type AnsiString and length 在 hbm 文件中 现在正在生成varchar 800
  • 验证 asp.net mvc 中的下拉列表

    in controller ViewBag Categories categoryRepository GetAllCategories ToList in view Html DropDownList Cat new SelectList
  • 如何扩展/架构 ASP.NET MVC 3 授权属性来处理这种情况

    我一直在努力思考这个答案 但找不到如何正确执行此操作的好解决方案 我读过这些文章 http schotime net blog index php 2009 02 17 custom authorization with aspnet mv
  • 如何从 SQL Azure V11 升级到 V12?

    我正在使用 V11 SQL Azure 在此阶段 我不想升级包含我当前所有 QA 和生产数据库的现有 SQL 服务器 从逻辑上讲 为 V12 创建新的 SQL Server 设置似乎更安全 然后以某种方式将 V11 数据库实例从我的 V11
  • StripeException:没有这样的计划

    我正在创建一个客户对象并将其分配给 Stripe 中的一个计划 但收到错误 不存在这样的计划 错误中给出的计划 ID 是正确的计划 ID No such plan prod EIcYiWkVa7LF7T 可能值得注意的是 客户的 Strip
  • 如何在 ASP.NET MVC 中将 XML 文件发送到客户端

    在 ASP NET MVC 中 我有一个数据库表 我想在某个视图页面上有一个按钮 如果某个用户单击该按钮 我的应用程序将生成包含数据库中所有行的 XML 文件 然后 应将包含 XML 的文件发送到客户端 以便用户看到下载弹出窗口 同样 我希
  • Azure 函数核心工具安装卡在 Visual Studio Code 中

    我创建了 Azure 函数应用程序来执行 powershell 脚本 想先在我的本地运行它来测试它 当我运行它时 无论有没有调试选项 都会出现一个弹出窗口 其中显示 您必须安装 Azure Functions 核心工具才能调试本地函数 当我
  • 更新 Azure Blob 上的 LastModified

    我正在移植代码以使用 C 中的 Azure 存储 SDK 传统上 我称其为更新修改文件的上次写入 修改时间 File SetLastWriteTimeUtc fileName lastWriteTimeUtc 要更新 blob 的上次修改时
  • Azure webjob - 队列处理功能的正常关闭

    我有一堆 webjob 队列处理函数 public static void ProcessSomething QueueTrigger testrequest TestThing thing TextWriter logger Cancel
  • 您认为 ASP.NET MVC 会与 ASP.NET Webforms 竞争吗?

    您认为 ASP NET MVC 会在 Microsoft Web 开发市场中占据重要份额吗 还是会占市场的 10 15 哦是的 它将让 Web 表单脱颖而出 我们已经看到了真正的 MVC 框架在 Java 世界中的价值 在 MS 世界中 这
  • Azure函数插入但不更新cosmosDB

    我有一个 azure 函数 从 Azure 服务总线队列接收消息并将文档发送到 cosmosDB 我正在使用 Azure 函数 1 x public static class Function1 FunctionName Function1

随机推荐

  • 如何让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