📅  最后修改于: 2020-11-21 07:26:40             🧑  作者: Mango
在Entity Framework 6.0中,还有另一个新功能称为“拦截器”或“拦截”。侦听代码是围绕侦听接口的概念构建的。例如,IDbCommandInterceptor接口定义在EF调用ExecuteNonQuery,ExecuteScalar,ExecuteReader和相关方法之前调用的方法。
实体框架可以通过使用拦截真正发挥作用。使用这种方法,您可以暂时捕获更多信息,而不必使代码混乱。
要实现此目的,您需要创建自己的自定义拦截器并进行相应的注册。
一旦创建了实现IDbCommandInterceptor接口的类,就可以使用DbInterception类将其注册到Entity Framework。
IDbCommandInterceptor接口有六个方法,您需要实现所有这些方法。以下是这些方法的基本实现。
让我们看一下下面的代码,其中实现了IDbCommandInterceptor接口。
public class MyCommandInterceptor : IDbCommandInterceptor {
public static void Log(string comm, string message) {
Console.WriteLine("Intercepted: {0}, Command Text: {1} ", comm, message);
}
public void NonQueryExecuted(DbCommand command,
DbCommandInterceptionContext interceptionContext) {
Log("NonQueryExecuted: ", command.CommandText);
}
public void NonQueryExecuting(DbCommand command,
DbCommandInterceptionContext interceptionContext) {
Log("NonQueryExecuting: ", command.CommandText);
}
public void ReaderExecuted(DbCommand command,
DbCommandInterceptionContext interceptionContext) {
Log("ReaderExecuted: ", command.CommandText);
}
public void ReaderExecuting(DbCommand command,
DbCommandInterceptionContext interceptionContext) {
Log("ReaderExecuting: ", command.CommandText);
}
public void ScalarExecuted(DbCommand command,
DbCommandInterceptionContext
一旦创建了实现一个或多个拦截接口的类,就可以使用DbInterception类将其注册到EF,如以下代码所示。
DbInterception.Add(new MyCommandInterceptor());
拦截器也可以使用基于DbConfiguration代码的配置在应用程序域级别注册,如以下代码所示。
public class MyDBConfiguration : DbConfiguration {
public MyDBConfiguration() {
DbInterception.Add(new MyCommandInterceptor());
}
}
您还可以使用代码配置拦截器配置文件-