我试图使用SqlDataProvider对db操作进行审计。
Global.asax.cs
Audit.Core.Configuration.DataProvider = new SqlDataProvider()
{
ConnectionString = "...",
Schema = "dbo",
TableName = "Event",
IdColumnName = "EventId",
JsonColumnName = "JsonData",
LastUpdatedDateColumnName = "LastUpdatedDate",
CustomColumns = new List<CustomColumn>()
{
new CustomColumn("EventType", ev => ev.EventType),
new CustomColumn("ModuleName", ev => "AuditTrail")
}
};如果我添加自定义列,如下所示
new CustomColumn("StartDate", ev=>ev.StartDate),
new CustomColumn("EndDate", ev=>ev.EndDate),
new CustomColumn("Duration", ev=>ev.Duration),
new CustomColumn("Target", ev=>ev.Target),
new CustomColumn("Comments", ev=>ev.Comments),
new CustomColumn("Environment", ev=> ev.Environment),它引发一个异常“从对象类型Audit.Core.AuditEventEnvironment到已知的托管提供者本机类型不存在映射”。
我怎么才能追踪到这里的事件。基本上,我希望将jasonData字段值插入到几个字段中。
上下文更改
public override int SaveChanges()
{
return _helper.SaveChanges(_auditContext, () => base.SaveChanges());
}
public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken))
{
return await _helper.SaveChangesAsync(_auditContext, () => base.SaveChangesAsync(cancellationToken));
}发布于 2021-02-19 09:53:25
这是数据类型中的一个问题。正确的代码应该是
Audit.Core.Configuration.DataProvider = new SqlDataProvider()
{
ConnectionString = "...",
Schema = "dbo",
TableName = "Event",
IdColumnName = "EventId",
JsonColumnName = "JsonData",
LastUpdatedDateColumnName = "LastUpdatedDate",
CustomColumns = new List<CustomColumn>()
{
new CustomColumn("EventType", ev => ev.EventType),
new CustomColumn("ModuleName", ev => "AuditTrail"),
new CustomColumn("StartDate", ev=>Convert.ToDateTime(ev.StartDate)),
new CustomColumn("EndDate", ev=>Convert.ToDateTime(ev.EndDate)),
new CustomColumn("Duration", ev=>Convert.ToInt32(ev.Duration)),
}
};我们可以为json数据字段的其他一些细节添加以下自定义字段。
new CustomColumn("UserName", ev=> ev.Environment.UserName.ToString()),
new CustomColumn("MachineName", ev=> ev.Environment.MachineName.ToString()),
new CustomColumn("DomainName", ev=> ev.Environment.DomainName.ToString()),
new CustomColumn("CallingMethod", ev=> ev.Environment.CallingMethodName.ToString()),
new CustomColumn("DatabaseName", ev=> ev.GetEntityFrameworkEvent().Database.ToString()),由于json内容的条目在insert和update中略有不同,所以我仍然试图通过操作来分离数据。
https://stackoverflow.com/questions/66271955
复制相似问题