3

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 つだけです!

誰にもアイデアはありますか?私自身、デフォルトのリビジョン エンティティがまだ何らかの形で使用されていると推測し、カスタム リビジョン エンティティを登録しようとすると、これが発生します。

4

1 に答える 1