Audit.Net on Update 为 table 中的每个值插入空记录
Audit.Net on Update inserts empty records for every value that is in the table
我正在使用 Audit.Net EntityFramework 数据提供程序。
这是我在Startup.cs
中的配置
Audit.Core.Configuration.Setup().UseEntityFramework(_ => _.AuditTypeMapper(t => typeof(AuditLog)).AuditEntityAction<AuditLog>((ev, entry, entity) =>
{
entity.AuditData = entry.ToJson();
entity.AuditDate = DateTime.Now;
entity.AuditUser = Environment.UserName;
// entity.AuditUsername = Environment.MachineName;
entity.AuditUsername = HttpContext.Current.User.Identity.Name;
})
.IgnoreMatchedProperties(true));
这是 DBContext
public class DbContext : Audit.EntityFramework.AuditDbContext, IDbContext
{
public DbContext()
: base("DbContext")
{
Database.SetInitializer<DbContext>(null);
}
public Database GetDatabase()
{
return this.Database;
}
public new DbEntityEntry<T> Entry<T>(T entity) where T : class
{
return (new PContext().Entry(entity) as DbEntityEntry<T>);
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
仅当我更改表单或数据上的值时才会出现此问题table
突出显示的是更新后的审核记录。添加了以下所有内容,似乎它进入了某种递归,因为更新记录之后的第一个 JSON 记录有 1281 个字符,第二个 1146 ,第三个 1763 ,第 4 个 2773 等等,直到我停止项目。
在entity.AuditData = entry.ToJson();
得到这个
System.OutOfMemoryException: 'Exception of type 'System.OutOfMemoryException' was thrown.'
可能是什么问题?
如果您直接从审计的 DbContext 对 AuditLog
DbSet 进行更改,则应将 AuditLog
实体标记为不可审计,这样审计库就不会提取更改。
这可以通过用 [AuditIgnore]
装饰 class 来实现,例如:
[AuditIgnore]
public class AuditLog
{
...
}
或通过配置:
Audit.EntityFramework.Configuration.Setup()
.ForContext<P121DbContext>()
.UseOptOut()
.Ignore<AuditLog>();
我正在使用 Audit.Net EntityFramework 数据提供程序。 这是我在Startup.cs
中的配置 Audit.Core.Configuration.Setup().UseEntityFramework(_ => _.AuditTypeMapper(t => typeof(AuditLog)).AuditEntityAction<AuditLog>((ev, entry, entity) =>
{
entity.AuditData = entry.ToJson();
entity.AuditDate = DateTime.Now;
entity.AuditUser = Environment.UserName;
// entity.AuditUsername = Environment.MachineName;
entity.AuditUsername = HttpContext.Current.User.Identity.Name;
})
.IgnoreMatchedProperties(true));
这是 DBContext
public class DbContext : Audit.EntityFramework.AuditDbContext, IDbContext
{
public DbContext()
: base("DbContext")
{
Database.SetInitializer<DbContext>(null);
}
public Database GetDatabase()
{
return this.Database;
}
public new DbEntityEntry<T> Entry<T>(T entity) where T : class
{
return (new PContext().Entry(entity) as DbEntityEntry<T>);
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
仅当我更改表单或数据上的值时才会出现此问题table
突出显示的是更新后的审核记录。添加了以下所有内容,似乎它进入了某种递归,因为更新记录之后的第一个 JSON 记录有 1281 个字符,第二个 1146 ,第三个 1763 ,第 4 个 2773 等等,直到我停止项目。
在entity.AuditData = entry.ToJson();
得到这个
System.OutOfMemoryException: 'Exception of type 'System.OutOfMemoryException' was thrown.'
可能是什么问题?
如果您直接从审计的 DbContext 对 AuditLog
DbSet 进行更改,则应将 AuditLog
实体标记为不可审计,这样审计库就不会提取更改。
这可以通过用 [AuditIgnore]
装饰 class 来实现,例如:
[AuditIgnore]
public class AuditLog
{
...
}
或通过配置:
Audit.EntityFramework.Configuration.Setup()
.ForContext<P121DbContext>()
.UseOptOut()
.Ignore<AuditLog>();