繁体   English   中英

Audit.Net 获取调用.SaveChangesAsync()方法的名称

[英]Audit.Net Get the name of the method which called .SaveChangesAsync()

我有以下设置

Audit.Core.Configuration.Setup() // Triggered on a database save.
    .UseEntityFramework(ef => ef
        .AuditTypeExplicitMapper(m => m
            .Map<Item, AuditLog>()
            .AuditEntityAction<AuditLog>((evt, entry, auditEntity) =>
            {
                auditEntity.AuditData = entry.ToJson();
                auditEntity.AuditDate = DateTime.UtcNow;
                auditEntity.CallingMethod = "Calling Method"; <-- Where I need the calling method.
            })
        )
    );
    public async Task DoSomeWork() {  //<--- I want to get "DoSomeWork"
        // Some work..
        await dbConn.SaveChangesAsync();
        return updated;
    }

我怎样才能访问调用 .saveChangesAsync 的方法,以便知道它是从哪里触发的? 我已经使用StackTrace检查过,但是它充斥着库级框架,这些框架不是很有用,我找不到正确的父方法。

我在evt中看到它提供了一个调用父名称,但这只是一个级别,所以只是“SaveChangesAsync”方法。

谢谢

如果您可以更改调用SaveChangesAsync的代码并且您正在从 AuditDbContext 继承 DbContext( 高级 SaveChanges 拦截),那么您可以添加一个新的 SaveChanges 方法,其中包含一个用[CallerMemberName]装饰的可选参数,并将调用者成员名称存储在AuditEvent 的自定义字段。

例如:

public class YourDbContext : AuditDbContext
{
    public override Task<int> SaveChangesAsync(CancellationToken cancellationToken = default) 
        => throw new NotImplementedException("Should call SaveChangesAuditAsync");

    public Task<int> SaveChangesAuditAsync([CallerMemberName] string memberName = "", CancellationToken cancellationToken = default)
    {
        this.AddAuditCustomField("Caller", memberName);
        return base.SaveChangesAsync(cancellationToken);
    }
}

因此,在您的 AuditEntityAction 中,您可以从自定义字段中获取调用方成员名称:

    ...
    .AuditEntityAction<AuditLog>((evt, entry, auditEntity) =>
    {
        auditEntity.CallingMethod = evt.CustomFields["Caller"];
    })

现在您的DoSomeWork()必须调用新方法:

public async Task DoSomeWork() 
{
    ...
    await dbConn.SaveChangesAuditAsync();
    return updated;
}

问题未解决?试试以下方法:

Audit.Net 获取调用.SaveChangesAsync()方法的名称

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2023 STACKOOM.COM