3
我想用NHibernate Envers記錄額外的字段「用戶」。我跟着幾個代碼示例,它們在語法方面似乎有所不同,可能是因爲它們中的一些已經過時了一些。但是我無法讓它工作。審計用戶使用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但我得到了完全相同的錯誤。 – ds99jove 2013-04-23 07:16:03
聽起來很奇怪......如果仍然使用默認版本實體,您將/應該得到另一個異常消息。 您可以創建一個最小化,失敗的測試作爲拉取請求,如果您可以重新創建問題,請將其報告給JIRA? – Roger 2013-04-23 08:37:06
問題解決了,錯誤不在Envers。感謝您的迴應! – ds99jove 2013-04-23 09:31:43