【发布时间】:2013-04-23 05:33:56
【问题描述】:
我正在尝试使用 NHibernate Envers 来记录一个附加字段“用户”。我遵循了几个代码示例,这些示例在语法方面似乎有所不同,可能是因为其中一些有点过时了。但是我无法让它工作。
我遇到了这个异常:
只有一个属性可能具有 [RevisionNumber] 属性!
我的自定义修订实体:
public class CustomRevisionEntity
{
public virtual int Id { get; set; }
public virtual DateTime RevisionTimestamp { get; set; }
public virtual Guid UserIdentityId { get; set; }
public override bool Equals(object obj)
{
if (this == obj) return true;
var revisionEntity = obj as CustomRevisionEntity;
if (revisionEntity == null) return false;
var that = revisionEntity;
if (Id != that.Id) return false;
return RevisionTimestamp == that.RevisionTimestamp;
}
public override int GetHashCode()
{
var result = Id;
result = 31 * result + (int)(((ulong)RevisionTimestamp.Ticks) ^ (((ulong)RevisionTimestamp.Ticks) >> 32));
return result;
}
}
我的 IRevisionListener:
public class RevInfoListener : IRevisionListener
{
public void NewRevision(object revisionEntity)
{
var casted = revisionEntity as CustomRevisionEntity;
if (casted != null)
{
casted.UserIdentityId = Guid.NewGuid(); // TODO
}
}
}
首先我使用代码映射来映射实体:
_modelMapper.Class<CustomRevisionEntity>(entity =>
{
entity.Property(x => x.Id);
entity.Property(x => x.RevisionTimestamp);
entity.Property(x => x.UserIdentityId);
});
然后我配置 Envers 和 NHibernate
var enversConf = new FluentConfiguration();
enversConf.SetRevisionEntity<CustomRevisionEntity>(x => x.Id, x => x.RevisionTimestamp, new RevInfoListener());
enversConf.Audit<OrganizationEntity>().Exclude(x => x.Version);
configuration.IntegrateWithEnvers(enversConf); // This is the nh-configuration
最后一行给了我一个例外:
只有一个属性可以具有 [RevisionNumber] 属性!
有人有什么想法吗?我自己推测默认的修订实体仍然以某种方式使用,当我尝试注册我的自定义修订实体时会发生这种情况。
【问题讨论】:
-
我尝试切换到 AttributeConfiguration 但我得到了完全相同的错误。
-
听起来很奇怪...如果仍然使用默认修订实体,您将/应该收到另一个异常消息。您能否创建一个最小化的失败测试作为拉取请求,如果您可以重新创建问题,请将其报告给 JIRA?
-
问题已解决,Envers 中没有错误。感谢您的回复!
标签: nhibernate nhibernate-envers