Asp.net MVC4 CodeFirst 使用EFTracingProvider
一、关于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的更多相关文章
- ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存
		
ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存 part 1:给我点时间,允许我感慨一下2016年 正好有时间,总结一下最近使用的一些技术,也算是为2016年画上一个完 ...
 - CentOS上 Mono 3.2.8运行ASP.NET MVC4经验
		
周一到周三,折腾了两天半的时间,经历几次周折,在小蝶惊鸿的鼎力帮助下,终于在Mono 3.2.8上运行成功MVC4.在此总结经验如下: 系统平台的版本: CentOS 6.5 Mono 3.2.8 J ...
 - ASP.NET MVC4入门到精通系列目录汇总
		
序言 最近公司在招.NET程序员,我发现好多来公司面试的.NET程序员居然都没有 ASP.NET MVC项目经验,其中包括一些工作4.5年了,甚至8年10年的,许多人给我的感觉是:工作了4.5年,We ...
 - [MVC4]ASP.NET MVC4+EF5(Lambda/Linq)读取数据
		
继续上一节初始ASP.NET MVC4,继续深入学习,感受了一下微软的MVC4+EF5(EntityFramework5)框架的强大,能够高效的开发出网站应用开发系统,下面就看一下如何用MVC4+EF ...
 - 21、ASP.NET MVC入门到精通——ASP.NET MVC4优化
		
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 删除无用的视图引擎 默认情况下,ASP.NET MVCE同时支持WebForm和Razor引擎,而我们通常在同一个项目中只用到了一种视图引擎 ...
 - 最新版CentOS6.5上安装部署ASP.NET MVC4和WebApi
		
最新版CentOS6.5上安装部署ASP.NET MVC4和WebApi 使用Jexus5.8.1独立版 http://www.linuxdot.net/ ps:该“独立版”支持64位的CentOS ...
 - Asp.Net MVC4 + Oracle + EasyUI 学习 第二章
		
Asp.Net MVC4 + Oracle + EasyUI 第二章 --使用Ajax提升网站性能 本文链接:http://www.cnblogs.com/likeli/p/4236723.html ...
 - Asp.Net MVC4 + Oracle + EasyUI 学习 第一章
		
Asp.Net MVC4 + Oracle + EasyUI 第一章 --操作数据和验证 本文链接:http://www.cnblogs.com/likeli/p/4234238.html 文章集合 ...
 - Asp.Net MVC4 + Oracle + EasyUI  学习 序章
		
Asp.Net MVC4 + Oracle + EasyUI 序章 -- 新建微软实例 本文链接:http://www.cnblogs.com/likeli/p/4233387.html 1. 简 ...
 
随机推荐
- .NET中Redis安装部署及使用方法简介
			
一Redis服务端以服务方式运行 修改端口压缩文件中配置的是6488 修改密码 修改库的数量 工具配置安装后如下图 二Redis服务端以控制台方式运行 第一步配置本地服务 第二部安装和配置客户端 三C ...
 - SQL Prompt5 破解版+使用说明 [转]
			
SQL脚本越写越多,总是觉得编写效率太过于低下,这和打字速度无关.在我个人编写SQL脚本时,至少会把SQL的格式排列成易于阅读的,因为其他人会阅读到你的SQL,无论是在程序中或是脚本文件中,良好的排版 ...
 - MVC4 + EF为Model添加单独的验证属性
			
可使用以下方式给Model加上相关的meta验证属性,这样实体的验证属性就不会被例如EF或其他工具自动生成的Model所替换了. using System.ComponentModel.DataAnn ...
 - php_PHP与Mysql的连接
			
展示效果: 繁写: <?php echo "This is a test</br>"; echo "asdfasdfadsf"; ...
 - Linux下Nagios
			
Linux下Nagios的安装与配置 一.Nagios简介 Nagios是一款开源的电脑系统和网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机 ...
 - 笔记28 mssql的update :from语法
			
原文:笔记28 mssql的update :from语法 笔记28 mssql的update :from语法 --mssql的update :from语法 --a表 b表 结构分别 id ,name ...
 - uploadfiy  动态传递Form 参数
			
参见 百度 http://jingyan.baidu.com/article/a3a3f8118b1c4d8da3eb8a60.html @{ ViewBag.Title = "Ind ...
 - 深入理解C指针之六:指针和结构体
			
原文:深入理解C指针之六:指针和结构体 C的结构体可以用来表示数据结构的元素,比如链表的节点,指针是把这些元素连接到一起的纽带. 结构体增强了数组等集合的实用性,每个结构体可以包含多个字段.如果不用结 ...
 - ASP.NET学习笔记--自己写的Login.aspx
			
以前有大学有学过,但是没学好,现在准备完全自己动手做一个网站,学习一下ASP.NET 做一个登录页面,首先要有创建一个新的网站,添加Login.aspx,然后做出自己想要的DIV和CSS布局, 之后创 ...
 - nexus私服linux搭建问题
			
一.最近搭建nexus私服,从官网下载下来总是报503服务器无效,很是无奈,最后在网上找到一个可以用的 收藏起来,这里给大家共享一下 下载地址:http://pan.baidu.com/s/1kT3U ...