開始
EF6.1也出來不少日子了,6.1相比6.0有個很大的特點就是新增了System.Data.Entity.Infrastructure.Interception 命名空間,此命名空間下的對象可以允許我們更加方便的了解到EF運行時的一些信息,當然我們最想看的還是EF生成的Sql語句,話不多講,開始干吧;
class EFIntercepterLogging : DbCommandInterceptor
{
private readonly Stopwatch _stopwatch = new Stopwatch();
public override void ScalarExecuting(System.Data.Common.DbCommand command, DbCommandInterceptionContext<object> interceptionContext)
{
base.ScalarExecuting(command, interceptionContext);
_stopwatch.Restart();
}
public override void ScalarExecuted(System.Data.Common.DbCommand command, DbCommandInterceptionContext<object> interceptionContext)
{
_stopwatch.Stop();
if (interceptionContext.Exception != null)
{
Trace.TraceError("Exception:{1} \r\n --> Error executing command: {0}", command.CommandText, interceptionContext.Exception.ToString());
}
else
{
Trace.TraceInformation("\r\n執行
從方法名我們可以看出大致就三類:讀取類的sql,[Reader],非讀取類的sql,[NonQuery],還有[Scalar],這類用的比較少,跟原始的ADO.NET命令類型基本一樣,不多講.每個sql語句類型的方法都有執行前Executing,執行後Executed,從命名上我們就可以看出AOP的身影哈,接下來看如何使用它...
查看本欄目