一、关于EFTracingProvider

EFTracingProvider相关信息见作者博客:关于EFTracingProvider

EFTracingProvider Demo下载地址:Tracing and Caching Provider Wrappers for Entity Framework 4

EFTracingProvider 相关问题讨论:DISCUSSIONS

EFTracingProvider Nuget安装:Entity Framework Tracing Provider 1.0.0

二、如何在CodeFirst模式下使用EFTracingProvider

通过查阅的资料发现,给出的EFTracingProvider示例大都是在模型优先的模式下使用的,少有代码优先模式下的例子,不过好在在(DISCUSSIONS)里发现了答案。

现将CodeFirst模式下的使用方法做一总结,以供参考。

1、Web.config配置,添加如下配置。

  <appSettings>

	<!--turn on/off EFTracing-->
<add key="EFTracingProvider:Enabled" value="true" />
<!-- write log messages to the console. -->
<add key="EFTracingProvider.logToConsole" value="false" />
<!-- append log messages to the specified file -->
<add key="EFTracingProvider.logToFile" value="E:\sqllog.txt" /> </appSettings>
  <system.data>
<DbProviderFactories>
<add name="EF Caching Data Provider" invariant="EFCachingProvider" description="Caching Provider Wrapper" type="EFCachingProvider.EFCachingProviderFactory, EFCachingProvider, Version=1.0.0.0, Culture=neutral, PublicKeyToken=def642f226e0e59b" />
<add name="EF Tracing Data Provider" invariant="EFTracingProvider" description="Tracing Provider Wrapper" type="EFTracingProvider.EFTracingProviderFactory, EFTracingProvider, Version=1.0.0.0, Culture=neutral, PublicKeyToken=def642f226e0e59b" />
<add name="EF Generic Provider Wrapper" invariant="EFProviderWrapper" description="Generic Provider Wrapper" type="EFProviderWrapperToolkit.EFProviderWrapperFactory, EFProviderWrapperToolkit, Version=1.0.0.0, Culture=neutral, PublicKeyToken=def642f226e0e59b" />
</DbProviderFactories>
</system.data>

2、Global文件配置,在Application_Start()中添加如下代码:

            //当启用EFTracingProvider时,不进行初始化数据库
if (string.Equals(ConfigurationManager.AppSettings["EFTracingProvider:Enabled"], "true", StringComparison.InvariantCultureIgnoreCase))
{
Database.SetInitializer<JYZSContext>(null);
JYZSContext.TraceEnabled = true;
}
else
{
Database.SetInitializer<JYZSContext>(new JYZSInitializer());
}

3、修改你的DbContext,主要是将构造函数中的DbConnection类型链接改为TracingConnection类型的链接。

        #region Trace Mechanics

        public static bool TraceEnabled = false;

        public JYZSContext() : this("JYZSConnection") { }

        public JYZSContext(string nameOrConnectionString)
: base(CreateConnection(nameOrConnectionString), true)
{
if (TraceEnabled)
{
((IObjectContextAdapter)this).ObjectContext.EnableTracing();
}
} private static DbConnection CreateConnection(string nameOrConnectionString)
{
EFTracingProviderFactory.Register(); ConnectionStringSettings connectionStringSetting =
ConfigurationManager.ConnectionStrings[nameOrConnectionString];
string connectionString;
string providerName; if (connectionStringSetting != null)
{
connectionString = connectionStringSetting.ConnectionString;
providerName = connectionStringSetting.ProviderName;
}
else
{
providerName = "System.Data.SqlClient";
connectionString = nameOrConnectionString;
} return CreateConnection(connectionString, providerName);
} private static DbConnection CreateConnection(string connectionString, string providerInvariantName)
{
DbConnection connection = null;
if (TraceEnabled)
{
connection = CreateTracingConnection(connectionString, providerInvariantName);
}
else
{
DbProviderFactory factory = DbProviderFactories.GetFactory(providerInvariantName);
connection = factory.CreateConnection();
connection.ConnectionString = connectionString;
}
return connection;
} private static EFTracingConnection CreateTracingConnection(string connectionString, string providerInvariantName)
{ string wrapperConnectionString =
String.Format(@"wrappedProvider={0};{1}", providerInvariantName, connectionString); EFTracingConnection connection =
new EFTracingConnection
{
ConnectionString = wrapperConnectionString
};
//hook up logging here
connection.CommandFinished +=
(sender, args) => Console.WriteLine(args.ToTraceString()); return connection;
} #endregion

三、总结说明

以上代码是在我的项目中整理出来的,使用时注意修改链接字符串名称,并根据你的需要修改配置。

以代码中配置为例,当运行程序时,就可以在 E:\sqllog.txt 查看到EF生成的SQL语句了。实在是方便极了。

Asp.net MVC4 CodeFirst 使用EFTracingProvider的更多相关文章

  1. ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存

    ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存 part 1:给我点时间,允许我感慨一下2016年 正好有时间,总结一下最近使用的一些技术,也算是为2016年画上一个完 ...

  2. CentOS上 Mono 3.2.8运行ASP.NET MVC4经验

    周一到周三,折腾了两天半的时间,经历几次周折,在小蝶惊鸿的鼎力帮助下,终于在Mono 3.2.8上运行成功MVC4.在此总结经验如下: 系统平台的版本: CentOS 6.5 Mono 3.2.8 J ...

  3. ASP.NET MVC4入门到精通系列目录汇总

    序言 最近公司在招.NET程序员,我发现好多来公司面试的.NET程序员居然都没有 ASP.NET MVC项目经验,其中包括一些工作4.5年了,甚至8年10年的,许多人给我的感觉是:工作了4.5年,We ...

  4. [MVC4]ASP.NET MVC4+EF5(Lambda/Linq)读取数据

    继续上一节初始ASP.NET MVC4,继续深入学习,感受了一下微软的MVC4+EF5(EntityFramework5)框架的强大,能够高效的开发出网站应用开发系统,下面就看一下如何用MVC4+EF ...

  5. 21、ASP.NET MVC入门到精通——ASP.NET MVC4优化

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 删除无用的视图引擎 默认情况下,ASP.NET MVCE同时支持WebForm和Razor引擎,而我们通常在同一个项目中只用到了一种视图引擎 ...

  6. 最新版CentOS6.5上安装部署ASP.NET MVC4和WebApi

    最新版CentOS6.5上安装部署ASP.NET MVC4和WebApi 使用Jexus5.8.1独立版 http://www.linuxdot.net/ ps:该“独立版”支持64位的CentOS ...

  7. Asp.Net MVC4 + Oracle + EasyUI 学习 第二章

    Asp.Net MVC4 + Oracle + EasyUI 第二章 --使用Ajax提升网站性能 本文链接:http://www.cnblogs.com/likeli/p/4236723.html ...

  8. Asp.Net MVC4 + Oracle + EasyUI 学习 第一章

    Asp.Net MVC4 + Oracle + EasyUI  第一章 --操作数据和验证 本文链接:http://www.cnblogs.com/likeli/p/4234238.html 文章集合 ...

  9. Asp.Net MVC4 + Oracle + EasyUI 学习 序章

    Asp.Net MVC4 + Oracle + EasyUI  序章 -- 新建微软实例 本文链接:http://www.cnblogs.com/likeli/p/4233387.html 1.  简 ...

随机推荐

  1. Composer常见问题

    Composer常见问题 原文链接:Composer常见问题 安装了Composer后,运行composer --version,查看Composer的版本号.如果出现下面的提示,那么软件安装成功. ...

  2. 数组排序、递归——(Java学习笔记二)

    升序:      选择排序:         选定一个元素,一次和后面的元素相比较,如果选定的元素大雨后面的比较元素,就交换位置         先出现最小值,最后出现最大值. public stat ...

  3. unix cd使用命令

    [语法]:     cd   [夹] [说明]:此命令用于工作文件以改变当前的文件夹,使用环境变量没有参数$HOME 作为它的参数,$HOME 路径通常在注册时输入. [抽样]: cd   文件夹 c ...

  4. ABP入门教程

    ABP入门教程 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应 ...

  5. Sicily 1732 Alice and Bob (二进制最大公约数)

    联系: http://soj.me/1732 Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description: Alice is a b ...

  6. update与fixedupdate差别

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网--Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=307 今天有人问我问什么我在处 ...

  7. GitFlow使用说明

    ———————安装--------------- $ git clone --recursive git://github.com/nvie/gitflow.git $ cd gitflow $ [s ...

  8. nodeJS起步 1

    nodeJS起步 -- (1) 先来简单介绍nodeJS 我们知道JavaScript是运行在浏览器中的,浏览器为它提供了一个上下文(context),从而让JavaScript得以解析执行. nod ...

  9. HDU 1256 图片8

    图片8 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  10. jQuery实现表格行的动态增加与删除

    删除之前删除2行后: 1<script> 8 $(document).ready(function(){ 9 //<tr/>居中 10 $("#tab tr" ...