gpt4 book ai didi

nhibernate - 使用 NHibernate Envers fluentconfiguration 审计用户

转载 作者:行者123 更新时间:2023-12-04 02:25:02 26 4
gpt4 key购买 nike

我正在尝试使用 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

最后一行给出了异常(exception):
只有一个属性可以具有 [RevisionNumber] 属性!

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

最佳答案

出现错误消息是因为 Id 属性被映射了两次。

在我们的映射类中我们有这个

_modelMapper.BeforeMapClass += (modelInspector, type, classCustomizer) => classCustomizer.Id(type.GetProperty("Id"), (idMapper) =>                                                                                                                                     
{
idMapper.Access(Accessor.Property);
idMapper.Generator(Generators.GuidComb);
});

然后我们再次尝试将 Id 映射为 CustomRevisionEntity 的属性

最终映射:

_modelMapper.Class<CustomRevisionEntity>(entity =>
{
entity.Id<int>(x => x.Id, mapper => mapper.Generator(Generators.Identity));
entity.Property(x => x.RevisionDate);
entity.Property(x => x.UserIdentityId);
});

关于nhibernate - 使用 NHibernate Envers fluentconfiguration 审计用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16161697/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com