C# 在IDbCommandInterceptor中捕获调用方法名

C# 在IDbCommandInterceptor中捕获调用方法名,c#,entity-framework,method-names,C#,Entity Framework,Method Names,我正在使用IDbCommandInterceptor捕获实体框架查询。这样,我可以访问一些关键信息,如DbParameters和DbCommand等 Bu我还需要知道这个查询是从哪里调用的。我已尝试通过使用StackTrace获取此信息: StackTrace stackTrace = new StackTrace(); System.Reflection.MethodBase methodBase = stackTrace.GetFrame(1).GetMethod(); 这可能适用于常规方

我正在使用
IDbCommandInterceptor
捕获实体框架查询。这样,我可以访问一些关键信息,如
DbParameter
s和
DbCommand

Bu我还需要知道这个查询是从哪里调用的。我已尝试通过使用
StackTrace
获取此信息:

StackTrace stackTrace = new StackTrace();
System.Reflection.MethodBase methodBase = stackTrace.GetFrame(1).GetMethod();
这可能适用于常规方法调用,但在本例中,由于我截取了实体框架机制,因此无法在代码中获取调用方法


当实体框架查询运行时,是否可以自动获取调用方法名?

有点晚了,但您走对了方向

选中,这将解释如何从调用堆栈获取信息

只需从该链接复制/粘贴:

var stack = new StackTrace(true);
command.CommandText += "\r\n\r\n/********************* \r\n * "
    + string.Join("\r\n * ",
    (from f in stack.GetFrames().Skip(2)
        let m = f.GetMethod()
        select m?.DeclaringType.Name + "." + m?.Name + ":" + f.GetFileLineNumber())
    ) + "\r\n*********************/";
缺点是在每个DB交互上调用StackTrace会对性能造成巨大的影响。在将其放入任何生产环境之前,请确保进行适当的测试