Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 对于不更新属性,Enverse将信息存储为空值_.net_Fluent Nhibernate_Nhibernate Envers - Fatal编程技术网

.net 对于不更新属性,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 {

我正在开发一个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 { 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会附加其事件侦听器。