.net 对于不更新属性,Enverse将信息存储为空值
我正在开发一个mvc应用程序,我正在使用fluent nhibernate和enverse将信息存储在数据库中并审核我的数据 我的实体基类如下所示:.net 对于不更新属性,Enverse将信息存储为空值,.net,fluent-nhibernate,nhibernate-envers,.net,Fluent Nhibernate,Nhibernate Envers,我正在开发一个mvc应用程序,我正在使用fluent nhibernate和enverse将信息存储在数据库中并审核我的数据 我的实体基类如下所示: [Audited] public class EntityBase : IEntity { public virtual int ID { get; set; } public virtual string CreatedBy { get; set; } public virtual string ModifiedBy {
[Audited]
public class EntityBase : IEntity
{
public virtual int ID { get; set; }
public virtual string CreatedBy { get; set; }
public virtual string ModifiedBy { get; set; }
public virtual DateTime CreatedDate { get; set; }
public virtual DateTime? ModifiedDate { get; set; }
public virtual bool IsActive { get; set; }
}
我的流畅映射:
internal class EntityMap<T> : ClassMap<T> where T:EntityBase
{
public EntityMap(string tableName = null)
{
Id(x => x.ID).DefaultStrategy<T>(tableName);
if (!string.IsNullOrEmpty(tableName))
base.Table(tableName);
Map(x => x.IsActive).Not.Nullable();
Map(x => x.CreatedDate).Not.Nullable().Not.Update().CustomType("Timestamp");
Map(x => x.CreatedBy).Not.Update();
Map(x => x.ModifiedDate).CustomType("Timestamp");
Map(x => x.ModifiedBy);
}
}
内部类EntityMap:ClassMap,其中T:EntityBase
{
公共EntityMap(字符串tableName=null)
{
Id(x=>x.Id).DefaultStrategy(tableName);
如果(!string.IsNullOrEmpty(tableName))
base.Table(tableName);
Map(x=>x.IsActive).Not.Nullable();
映射(x=>x.CreatedDate).Not.Nullable().Not.Update().CustomType(“时间戳”);
Map(x=>x.CreatedBy).Not.Update();
映射(x=>x.ModifiedDate).CustomType(“时间戳”);
Map(x=>x.ModifiedBy);
}
}
当我将每个实体存储到db时,预插入操作正在运行,它为createdDate和createdBy设置值
更新实体时出现问题。CreatedDate和CreatedBY不是更新字段,因此我不会将此信息存储在viewmodel中,因此在转换到模型/实体a期间,没有关于CreatedDate和CreatedBY的信息。在我的表中,我拥有编辑和entitybase之后的所有信息,但在审计中,我收到了一个新行,其中包含空的CratedDate和CreatedBy
有没有办法配置enverse以避免丢失这些数据?是的,我想应该可以。IIRC预插入事件处理程序同时具有状态和实体实例。你在更新它们吗?此外,您的侦听器和envers侦听器的顺序可能很重要。你是在envers之前注册的吗?另一方面,我不明白如果你使用envers为什么需要这些道具?您的修订实体上没有用户和时间吗?回答第二个问题:它是在我们的应用程序中包含enverse之前创建的。此外,当您希望在网格中显示某些数据时,它也会有所帮助。因为在数据库上很容易实现排序。第一个问题。它不起作用。“此外,侦听器和envers侦听器的顺序可能很重要。您是在envers之前注册的吗?”我不按需使用envers侦听器,我只使用实体上方的属性,仅此而已。当您在配置对象上调用IntegrateWithEnvers时,envers会附加其事件侦听器。