json - 如何使用 SqlDataProvider 在 Audit.Net 中跟踪事件
问题描述
我正在尝试使用 SqlDataProvider 审核数据库操作。
全球.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));
}
解决方案
这是数据类型的问题。正确的代码应该是
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 内容的条目在插入和更新中略有不同,因此我仍在尝试通过操作来分隔数据。
推荐阅读
- python-3.x - Rmagic错误:R没有属性png
- python - 如何使用 selenium 在 chrome 中下载 .msi 文件
- amazon-web-services - 在“或”条件下过滤 AWS SNS 消息
- javascript - document.querySelectorAll 无法通过延迟加载获取页面上的所有元素
- angular - 提交隐藏和非隐藏表单字段角度
- android - 如何将公历日期转换为伊斯兰(回历)日期?
- python - 使用 NLP 和 ML 在 Google 上自动搜索公司信息(并购)
- python - 使用 Python 脚本为远程网页生成 Selenium 屏幕截图 - 出现 about:neterror 错误
- python - 编写一个 for 循环来删除标点符号
- google-chrome - 如何让 chrome devtools 识别 moment.js