false/true 对于 IPreInsertEventListener 到底意味着什么?

2023-12-15

我最近发现了如何使用IPreDeleteEventListener, IPreInsertEventListener and IPreUpdateEventListener in the NHibernate.Event命名空间。

然而,我仍然困惑这些事件在成功或不成功的最终结果上会返回什么。

例如,让我们看一下 Ayende 的博客文章:

按照他的示例,可以实现如下接口:

public class AuditEventListener : IPreInsertEventListener {
    public bool OnPreInsert(OnPreInsert @event) {
        var audit = @event.Entity as IHaveAuditInformation;
        if (audit == null) return false;

        var time = DateTime.Now;
        var name = WindowsIdentity.GetCurrent().Name;

        Set(@event.Persister, @event.State, "CreatedAt", time);
        Set(@event.Persister, @event.State, "CreatedBy", name);

        audit.CreatedAt = time;
        audit.CreatedBy = name;

        return false;
    }
}

return 的实际含义是什么true or false作为返回值,因为我有另一个例子true返回而不是false正如阿延德所写。

  • Soft Deletes With NHibernate

这似乎又回来了true代替false.

public class SoftDeletableListener : IPreDeleteEventListener {
    public void Register(Configuration cfg) {
        cfg.EventListeners.PreDeleteEventListeners = 
            new IPreDeleteEventListener[] { this }
                .Concat(cfg.EventListeners.PreDeleteEventListeners)
                .ToArray();
    }

    public Boolean OnPreDelete(PreDeleteEvent @event) {
        ISoftDeletable softDeletable = @event.Entity as ISoftDeletable;

        if (softDeletable == null) return true;

        EntityEntry entry = @event.Session
            .GetSessionImplementation()
            .PersistenceContext
            .GetEntry(@event.Entity);
        entry.Status = Status.Loaded;

        softDeletable.Deleted = true;

        Object id = @event.Persister
            .GetIdentifier(@event.Entity, @event.Session.EntityMode);
        Object [] fields = @event.Persister
            .GetPropertyValues(@event.Entity, @event.Session.EntityMode);
        Object version = @event.Persister
            .GetVersion(@event.Entity, @event.Session.EntityMode);

        @event.Persister.Update(id
            , fields
            , new Int32[1]
            , false
            , fields
            , version
            , @event.Entity
            , null
            , @event.Session.GetSessionImplementation());

        return true;
    }
}

所以我想知道,什么false/true实际上根据所处理的侦听器来告诉 NHibernate。


这种情况下的返回值应该是enum,我们用这个名字OnPreEventResult,这些是可能的值:

  • OnPreEventResult.Continue=> 继续当前返回false
  • OnPreEventResult.Break=> 此刻,当true返回的是Action is aborted

因此,正如上面两个示例所示,我们可以使用返回值来管理执行流程:

  1. 接着说:
    如果我们在AuditEventListener return false,我们实际上返回类似的东西OnPreEventResult.Continue。我们已经制定了一些客户逻辑,并且希望 NHibernate 继续...所以false被返回

  2. 中断/中止:
    Ayende的例子向我们展示了如何将真正的DELETE变成UPDATE。显式调用更新@event.Persister.Update(...删除是not由于返回值而执行true, i.e. OnPreEventResult.Break

在代码中,返回值存储在名为的局部变量中veto,这又更具自我描述性。

See:

  • 实体插入动作, or
  • 实体删除动作

摘录自EntityInsertAction, the Execute() method:

...
bool veto = PreInsert();

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

false/true 对于 IPreInsertEventListener 到底意味着什么? 的相关文章

  • nHibernate + wcf + Isession

    我有一个包含 3 个项目的 C 解决方案 数据 WCF 和 UI 第一个是与数据库对话的类库 它通过第二个项目公开 该项目的类型为 WCF 服务库 原因是它将在第三个项目 称为 UI 的 Asp net 应用程序 作为指向 dll 的简单
  • 使用按位运算符时的 HQL 到 CriteriaQuery

    如何将其转换为 CriteraQuery select n from TagRegistration t join t Tag n where t Status status gt 0 order by count t ID desc n
  • 是否可以在不改变作为框架一部分的 DDD 模型的情况下使用 NHibernate

    我挖掘了很多关于DDD方法 无处不在的语言 聚合 存储库等 我认为 与我读到的很多内容相反 实体应该有行为而不是不可知论 我看到的所有例子都倾向于呈现实体虚拟自动属性 and an 空构造函数 受保护或最糟糕的是公开 就是这样 我认为这种对
  • nhibernate:读写字符串列表

    我知道我可以使用 nhibernate 读取写入字符串列表 如下所示 HasMany x gt x Attachments KeyColumn RowId Table PostTable Element PostKey 但这会创建一个额外的
  • 如何在 apache 中访问唯一 ID?

    如何访问 apache 跟踪每个请求的 unique id 我想在它调用的任何 php 脚本中跟踪它 并记录每个请求 我删除了以下行的评论http conf file LoadModule unique id module libexec
  • NHibernate:如何从会话缓存中获取实体实例?

    我在工作单元开始时开始会话 并在工作单元结束时关闭 工作单元分布在多种方法中 在一种方法中 我使用加载实体Get方法 所以它位于会话缓存中 实体实例对于方法来说是本地的 因此 当方法范围结束时 实体实例将无法访问 但实体仍在会话缓存中 现在
  • 是一对一的关系不好的策略

    用户始终拥有一个钱包 一个钱包始终属于一位用户 由于我想分离与钱夹相关的属性 我创建了 Wallet 对象并能够跟踪钱交易 我创建了 public Wallet Entity
  • NHibernate Hi/Lo - id 中的间隙

    场景 Hi Lo 初始化为MyEntity与 Lo 100 桌子是空的 具有不同连接的两个会话都插入了三个项目 TableIds 1 2 3 100 101 102 如果稍后有第三个进来并插入三项 TableIds 200 201 202
  • 如何将此本机 SQL 查询转换为 HQL

    所以我有这个很长的复杂的 Native SQLQuery string hql SELECT FROM SELECT a rownum r FROM select f2 filmid f2 realisateurid f2 titre f2
  • 一次调用多个结果

    分页数据时 我不仅想返回10条结果 还想获取所有页面中的项目总数 如何在一次调用中获取页面的总计数和结果 我的分页方法是 公共IList GetByCategoryId intcategoryId intfirstResult intmax
  • NHibernate:错误的列类型:发现浮点数,预期双精度

    我有一个具有属性的域实体类 public virtual double Result get set 该属性正在使用 NHibernate 3 2 代码映射内容进行映射 public class SampleResultMap ClassM
  • 如何使用 NHibernate 和 Fluent NHibernate 存储未截断的 varchar(max) 字符串

    我的数据库模式有一个 varchar max 字符串 我读过另一本问题 https stackoverflow com questions 2343105 override for fluent nhibernate for long te
  • NHibernate HiLo 生成和 SQL 2005/8 模式

    我手头上有一个问题 我花了几天时间寻找答案但无济于事 我们正在使用 HiLo Id 生成 一切似乎都工作正常 只要实体表处于同一架构中作为 hibernate unique key 表 表结构非常简单 我的 hi 值表在数据库中为 dbo
  • 如何在 nHibernate 中添加 NOLOCK?

    使用nhibernate时如何添加NOLOCK 条件查询 SetLockMode LockMode None http nhforge org doc nh en index html configuration optional dial
  • NHibernate:QueryOver<> 帮助

    我刚刚开始使用 NHibernate 在运行更复杂的查询时遇到了麻烦 我有带有附加标签列表的实体 用户将提供两个标签列表 包括和排除 我需要找到具有所有包含标签的所有实体 并排除在排除列表中具有任何标签的任何实体 下面是我的第一个努力 这显
  • NHibernate QueryOver<> - SubQuery 上的聚合函数

    如何使用 QueryOver 语法编写以下 SQL 语句 SELECT COUNT FROM SELECT FirstName LastName FROM People GROUP BY FirstName LastName as sub
  • NHibernate、Fluent NHibernate 和 Iesi.Collection 的问题。接下来你会尝试什么?

    我对 NHibernate 非常陌生 所以如果我在这里遗漏了一些琐碎的事情 我深表歉意 我目前正在阅读 packtpub 出版的一本名为 NHibernate 3 Beginners Guide 的书 我基本上都是按照书中的指示进行的 当我
  • Hibernate 乐观锁..它是如何工作的?

    我正在阅读下面关于休眠乐观锁定的博客 我打算将它与休眠一起使用 但是 我有一个担忧 我们有java代码和c 代码 都连接到一个数据库 虽然java代码可以使用hibernate来实现乐观锁定 但我想让c 代码做同样的事情 此外 C 代码正在
  • NHibernate同时将两列作为复合键和外键

    首先 我在网上和这里进行了彻底的搜索 但没有找到解决手头任务的明确解决方案 如果我的搜索不够准确并且这个答案已经发布 我深表歉意 问题 我有一张桌子 该表必须在两个字段上有一个主键 并且其他字段包含一些数据 作为主键的两个字段也必须是外键
  • NHibernate、数据绑定到 DataGridView、延迟加载和会话管理 - 需要建议

    我的主应用程序窗体 WinForms 有一个 DataGridView 它使用 DataBinding 和 Fluent NHibernate 显示 SQLite 数据库中的数据 该表单在应用程序运行的整个过程中都是打开的 出于性能原因 我

随机推荐

  • WPF:什么会导致绑定源不更新?

    我遇到了一种情况 我不确定如何调试 我希望有人能提出为什么它可能不起作用并为我指出正确的方向 我有一个来自数据库的 TIFF 图像 该图像作为类型的属性公开System Data Linq Binary 我想在一个 TIFF 图像中显示各个
  • Matlab 在一个轴上具有不同颜色的网格线

    我已经回顾了之前的问题 如中所述带实线和灰色的小网格但它并没有帮助我解决我的问题 我的问题与 xticks 有关 我希望我的网格线出现在 xaxis 上的特定点上 而其他一些网格线则以不同的颜色出现在不同的点上 像这样的东西 plot x
  • 无法推送到新的 gitlab 安装

    大家下午好 备份了几个旧的 git 存储库 并且正在将它们添加到已知的 gitlab 安装中 安装看起来像这里的指南https github com gitlabhq gitlabhq wiki VirtualBox Image 当添加新的
  • 映射数组项不会渲染所有元素

    在我更新对象中的答案后 它变得未定义 所以它不适合我的应用程序的其余部分 我所乞求的 0 answers Array 5 category description null legacyName null name null 1 answe
  • 如何使 macOS 应用程序窗口在关闭并使用菜单栏项重新打开时隐藏?

    我正在开发一个 macOS 应用程序 使用 Swift 和 Storyboard 其窗口的行为类似于 Adob e Creative Cloud 应用程序 经过几个小时的研究 我找不到最佳解决方案 这意味着 当应用程序启动时 主窗口会在状态
  • Java 内存模型是否保证线程内写入的可见性?

    考虑一个简单的单线程 Java 程序执行 不涉及同步操作 仅涉及实例变量的普通读取和写入 一个简单的实现忽略所有写入似乎符合 Java 内存规范 首先 适用的一般性声明 17 4 内存模型决定了程序中每个点可以读取哪些值 每个隔离线程的操作
  • MongoDB 中的全文搜索未产生“@@@”的预期结果

    所以我在一个集合中有一个文档 其中一个字段的值为 我对集合建立了索引并尝试运行查询 db getCollection TestCollection find text search 但没有显示结果 我该如何解决这个问题 样本文件 id Ob
  • Linux使用堆栈上的字符串编写系统调用[重复]

    这个问题在这里已经有答案了 我刚刚开始在 linux 上自学 x86 汇编these视频教程 早期它教您如何使用 write 系统调用来打印存储在数据部分中的字符串 是否可以使用 write 系统调用来打印存储在堆栈上的字符串 这是我编写的
  • AWS EMR Spark:写入 S3 时出错 - IllegalArgumentException - 无法从空字符串创建路径

    我已经尝试解决这个问题很长时间了 不知道为什么我会得到这个 仅供参考 我正在 AWS EMR 集群上的集群上运行 Spark 我调试并清楚地看到提供的目标路径 类似s3 my bucket name Spark 作业创建 orc 文件并在创
  • Android合并两张图片

    我想合并两张图像 然后将它们保存在 Android SDCard 上 一张来自相机 一张来自资源文件夹 问题是我收到此错误 Caused by java lang IllegalStateException 不可变位图传递给 Canvas
  • 如何将具有奇数列和行的输入矩阵中的中心 k × k 矩阵归零

    我正在尝试解决这个问题 编写一个名为 cancel middle 的函数 该函数接受 A 一个 n m 矩阵 作为输入 其中 n 和 m 均为奇数 k 为正数 小于 m 和 n 的奇整数 该函数不必 检查输入 该函数返回输入矩阵 其中心为
  • EF Code First Fluent API - 所有列的首字母小写

    我希望建立一个 EF Code First 约定 其中属性的所有列名称的首字母都是小写的 但是 我还有其他流畅的 API 代码可以更改默认列名称 我似乎无法找到一种方法来访问current属性的列名称 以便将第一个字母小写 从 Proper
  • sigaction 将 SIGINT 传递给系统调用,但不传递信号

    我有一个循环处理accept 2 称呼 我希望能够在以下情况下执行一些清理工作 SIGINT被发送到程序 我的第一个想法是使用signal功能 void signal handler int signal printf Caught sig
  • 为什么在执行批处理文件时,丹麦语字符不显示在文本编辑器中?

    我制作了一个简单的批处理文件 但是 Windows 命令处理器cmd exe当我执行批处理文件时 无法正确显示丹麦语字符 它显示了奇怪的字符 例如 反而 如果我输入echo 直接在cmd窗口中显示 我的电脑有问题吗 Use chcp管理您的
  • 通过拖动选择表格上的单元格

    我在看这个问题并看到了对 iPhone 游戏的参考 在该游戏中 你可以在屏幕上拖动并选择字母 我很好奇在 Javascript 中使用表格来实现这一点 因此 您可以将鼠标拖动到每个单元格上 然后它们就会突出显示 我不确定最好的方法是什么 但
  • ASP.NET Core rc2 中的 Cookie

    有人可以解释一下如何在 ASP NET Core rc2 应用程序中存储和获取 cookie 吗 我只能找到有关旧版本的过时信息HttpContext Response Cookies Get and Add方法 这两种方法在 Core 中
  • Webpack - 构建没有依赖项的包

    我想知道是否可以使用一些 javascript 文件构建一个捆绑包 但没有依赖项 我想要带有 React 组件的小捆绑包 在我的例子中 每个 React 组件都是由几个 React 组件构建的 例如评论组件包括评论框 列表和表单 我可以通过
  • 在 WPF 中的两个窗口之间共享同一对象

    我有代表我的班级AppSettings I have Main窗户和Settings window 每个窗口都包含对象的实例AppSettings 所以这是两个不同的对象 如果反对AppSettings in Settings窗口发生更改
  • 默认 .equals 和 .hashCode 如何适用于我的类?

    说我有自己的班级 public class MyObj 它有一些属性和方法 它没有实现 equals 也没有实现 hashCode 一旦我们调用 equals 和 hashCode 默认实现是什么 来自对象类 它们是什么 默认等于如何工作
  • false/true 对于 IPreInsertEventListener 到底意味着什么?

    我最近发现了如何使用IPreDeleteEventListener IPreInsertEventListener and IPreUpdateEventListener in the NHibernate Event命名空间 然而 我仍然