【问题标题】:How to track event in Audit.Net with SqlDataProvider如何使用 SqlDataProvider 在 Audit.Net 中跟踪事件
【发布时间】:2021-05-22 02:42:58
【问题描述】:

我正在尝试使用 SqlDataProvider 审核数据库操作。

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));
    }

【问题讨论】:

    标签: json audit .net-framework-version audit.net audit.net.sqlserver


    【解决方案1】:

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

         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中略有不同,所以我还在尝试通过action来分离数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-14
      • 2019-11-30
      • 2021-08-01
      • 2012-11-17
      相关资源
      最近更新 更多