首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Audit.Net中用SqlDataProvider跟踪事件

如何在Audit.Net中用SqlDataProvider跟踪事件
EN

Stack Overflow用户
提问于 2021-02-19 04:49:36
回答 1查看 120关注 0票数 1

我试图使用SqlDataProvider对db操作进行审计。

Global.asax.cs

代码语言:javascript
复制
                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")
        }
        };

如果我添加自定义列,如下所示

代码语言:javascript
复制
    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字段值插入到几个字段中。

上下文更改

代码语言:javascript
复制
    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));
    }
EN

回答 1

Stack Overflow用户

发布于 2021-02-19 09:53:25

这是数据类型中的一个问题。正确的代码应该是

代码语言:javascript
复制
     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数据字段的其他一些细节添加以下自定义字段。

代码语言:javascript
复制
    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中略有不同,所以我仍然试图通过操作来分离数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66271955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档