NHibernate Envers を使用して追加フィールド「ユーザー」を記録しようとしています。いくつかのコード例をたどってみましたが、構文に関しては少し異なっているように見えます。おそらくそれらのいくつかは少し古くなっているためです。しかし、私はそれを機能させることができません。
この例外が発生しています:
属性 [RevisionNumber] を持つことができるプロパティは 1 つだけです!
私のカスタム リビジョン エンティティ:
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] を持つことができるプロパティは 1 つだけです!
誰にもアイデアはありますか?私自身、デフォルトのリビジョン エンティティがまだ何らかの形で使用されていると推測し、カスタム リビジョン エンティティを登録しようとすると、これが発生します。