问题标签 [nhibernate-envers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1627 浏览

c# - 通过 DI 配置 Envers RevisionListener

为了向我们的应用程序添加审计跟踪,我们决定使用 NHibernate.Envers。为了允许特定于应用程序的修订跟踪,DefaultRevisionEntity使用特定于用户的数据进行了扩展。

EnversRevisionListener根据RevisionEntity您的班级装饰的属性决定使用哪种:

我正在使用 ServiceLocator 模式将我的访问器注入到RevisionListener. 目前这是我必须使用 ServiceLocator 并且真的想摆脱它的唯一地方。

是否有另一种灵活的方式将我的 UserAccessor 注入到 RevisionEntity 中?

0 投票
2 回答
1001 浏览

nhibernate - 夏普架构 + NHibernate Envers

目前我们使用的是 Sharp Architecture 1.9.6。我们需要审核我们的域类。使用 NHibernate Envers 完成这项任务似乎很舒服。但我无法配置 Sharp Architecture 来使用这个库。有一些错误,但我几乎解决了所有这些错误,除了一个。

错误如下:

例如,我在 DB 中有名为“Document”的 POCO 类和表“Documents”。我还创建了表“Documents_AUD”并将属性 [Audited] 添加到类“Document”。因此,如果 Document 类的某些对象发生了变化,Envers 必须将数据添加到“Doc​​uments_AUD”表中。为此,Envers 创建(动态?)另一个类的 ovbject - “Document_AUD”。此处出现错误:“NHibernate.MappingException No Persister for Document_AUD”。

而且我不知道在哪里为 Document_AUD 添加映射。

有人使用 Envers 和 Sharp Arch 吗?有人可以分享 Envers + Sharp Arch 配置吗?

非常感谢你!

0 投票
1 回答
2081 浏览

asp.net-mvc - 如何使用 NHibernate Envers 记录当前用户

我已经查看了如何在 Envers 的修订实体表中记录当前用户的用户名。但是,信息很少,而且我设法找到的信息也没有那么有用。

我有一个修订实体和侦听器,如下所示:

我想在 ASP.NET 环境中使用这两个。配置和会话工厂创建一次,因为这是一项昂贵的操作。对于每个事务,都会打开一个新会话。

从这个NHE Jira问题和这个相关的SO 问题中,我了解到在配置 nHibernate 时可以向侦听器注册用户名。

但是,这对我来说还不够好,因为这会为每笔交易注册首先连接到应用程序的人的用户名。

我需要能够向侦听器提供与特定事务相关的用户名。

以前,我使用 nHibernate 的更新前和更新后事件侦听器使用穷人的审计。在这里,我遇到了类似的问题,因为这些侦听器也与会话工厂相关联,而不是与会话相关联。因此我切换到旧式拦截器,它可以与里面的会话相关联OpenSession。这允许我将当前用户添加到拦截器。

但是,我不知道如何为 Envers 解决同样的问题。我希望有人能帮帮忙。

0 投票
1 回答
550 浏览

nhibernate - Envers 不保存审计-Nhibernate

我有以下envers配置:

没有创建审计表,也没有保存数据。我曾尝试audit.User_Audit自己创建表格,但没有任何变化。我有 nhibernate envers 1.30 和 nhibernate 3.3.1。

我需要其他配置来完成这项工作吗?

0 投票
1 回答
432 浏览

c# - 如何使用 NHibernate 和 Envers 交换唯一的排序列条目?

我现在正在使用 NHibernate 一段时间,最后遇到了一个问题,我既找不到答案,也找不到其他人似乎有这个问题。环境是 NHibernate 3.3.1.4000 和 NHibernate.Envers 1.4 用于保存历史。

我有以下类型的数据库表/实体类:

与映射:

我们有一个包含过程步骤列表的父对象。用户现在可以添加、删除或修改不同的步骤。一种“修改”是使用按钮在步骤列表中向上或向下移动所选项目来改变程序步骤的顺序。

让我们举一个具体的例子:

该方案是 4 个过程步骤 1-4 的列表:

用户选择第二项“Bbbb”并按下“Up”按钮,得到:

在代码中,我现在想做类似的事情

但是现在 NHibernates 开始发挥作用了。NHibernate 在提交事务时对第 1 步一无所知,因此尝试对数据库仅使用 2 个更新命令(第 2 步和第 3 步),由于 StepNo 列的独特性,这不起作用。在第 1 步之后添加 session.flush() 不会改变该行为的任何内容(我可以理解,因为我们在事务中)。

下一个想法只是session.CreateQuery("update...").ExecuteUpdate()用来对数据库进行更改,它工作正常,但正在围绕 Envers 工作,让我没有此更改的历史记录(再次很容易理解,因为 sql 刚刚传递)。

但是,在一次交易中拥有一切并拥有 Envers 的历史,进行这种改变的正确方法是什么?难道不是让“StepNo”列独一无二是让它工作的唯一方法吗?不希望丢失列的唯一性,因为正确的排序和数据库确保这一点很重要,这将是一个很大的帮助。

预先感谢您的想法!

[解决方案]:

jbl 和 cremor 似乎有唯一的答案。连同其他一些麻烦点,我们现在决定完全跳过 Envers,并使用一种更专业的方式来进行历史管理,不太通用,更适合我们的需求。如果没有 Envers,则可以使用 sql 命令通过简单的 3 步更新来解决问题。

0 投票
2 回答
1210 浏览

c# - NHibernate Envers - 如何审核单独数据库的修订?

我正在使用 Nhibernate Envers,我希望 Envers 将审计信息保存在单独的数据库中,以使事情更清洁/更易于维护。

我正在使用这个流畅的配置:

但是当我尝试创建架构时,我得到一个 HibernateException(指定的架构名称“nhibernate_testAU”要么不存在,要么您没有使用它的权限。)

物有所值,我的后端是 SQL Server 2005

0 投票
2 回答
248 浏览

nhibernate - nhibernate验证器和envers一起

我正在尝试在同一个项目中同时使用 nhibernate 验证器和 nhibernate envers ......但我得到了空期望:

如果我稍后初始化验证器,我会收到错误消息:

但如果我反过来做,我会得到错误:

有没有人试过这个??如何解决这个问题?

谢谢,哈里什

0 投票
1 回答
310 浏览

nhibernate - 休眠环境和乐观并发

我正在使用 nhibernate envers 进行审计。为数据库中的每个表创建一个对应的审计表。

Envers 需要两个必填字段:一个版本和另一个时间戳。

但是为了乐观并发,主表中也需要版本字段。

假设: TableA { id , version , name } 然后根据 envers 审计表有: { id, version, name, revision, revisionType }

审计表中的字段:版本和修订版完全相同,都包含条目的版本。

如果我从主表中删除版本字段,那么乐观并发将不适用于 nhibernate,并且对于 envers,必须指定修订字段。

我该如何处理这种情况?

0 投票
1 回答
525 浏览

.net - nHibernate Envers MOD

我是 nHibernate Envers 的新手,我在属性级别跟踪实体更改,默认情况下,它会创建属性名称的列,后缀为 _MOD,可以选择更改此后缀。

http://envers.bitbucket.org/#envers-envers-tracking-properties-changes-queries

但是,我需要基于 ColumnName_MOD 而不是 PropertyName_MOD 的这些 MOD 标志的列名。

我在哪里可以更改此配置。任何线索都会非常有帮助。

谢谢,苏

0 投票
1 回答
1930 浏览

nhibernate - 使用 NHibernate Envers fluentconfiguration 审计用户

我正在尝试使用 NHibernate Envers 来记录一个附加字段“用户”。我遵循了几个代码示例,这些示例在语法方面似乎有所不同,可能是因为其中一些有点过时了。但是我无法让它工作。

我遇到了这个例外:
只有一个属性可能具有属性 [RevisionNumber]!

我的自定义修订实体:

我的 IRevisionListener:

首先我使用代码映射来映射实体:

然后我配置 Envers 和 NHibernate

最后一行给了我一个例外:
只有一个属性可能具有属性 [RevisionNumber]!

有人有想法么?我自己会推测默认修订实体仍然以某种方式使用,当我尝试注册我的自定义修订实体时会发生这种情况。