EF团队推出了一套比较完整的缓存和SQL执行日志的解决方案,EFProviderWrappers。他们的做法是在原来的EF Provider之上,再加一层包装,通过这层包装拦截,进行数据缓存和日志监控。这里缓存的数据是数据库查询后返回的原生数据,并不是Entity实体对象,这样就可以避免Entity实体状态对缓存造成的的极端负面影响。并且这样的缓存对上层的数据查询本身是透明,在同一个封闭区间内,缓存数据所依赖的实体类型在被更新后(对应的表有发生CURD操作),缓存并会被自动清空。对于日志的监控,经过这层包装后就可以非常容易得到处理。大家可以从前面的链接下载到原代码,需要自己编译使用。
简单介绍下使用方法:
1. 下载源码编译,添加引用:
(1)EFProviderWrapperToolkit.dll
(2)EFTracingProvider.dll (用于输出sql)
(3)EFCachingProvider.dll (用于缓存)
2.从生成的ObjectContext中继承一个扩展的ObjectContext,定义所需的扩展属性,其中重点是重新定义构造器,生成包装后的EntityConnection对象。
注意:
(1)name=NORTHWNDEntities 这里的"NORTHWNDEntities" 是生成EF在app.config 或者 web.config 中对应的connectionstring 的名称。
(2)"EFTracingProvider","EFCachingProvider" 如果哪一个没有使用,可以把对应的那个字符串删除。
3. 在应用程序中注册Provider:
(1) 如果是Winform应用,可以在应用启动时调用下面两句代码,进行注册。
(2) 如果是Web应用,需要在 web.config 里追加如下配置:(和 system.web 节点平级)
如何追加 Log4net 的输出:
按照上面的步骤,在ObjectContext的扩展类中,追加了一些代码,详细看代码中的注释:
log4net.config 的配置如下:(关于log4net的其他详细配置说明,参考http://logging.apache.org/log4net/release/config-examples.html)
这样在应用程序中,就可以通过log4net的配置文件控制 EF 生成的sql的输出了。上面的log4net里配置了两个Appender一个是输出到Console,一个输出到 EFLogs.txt 里。
下面调用一下 EF, 看看输出的 log:
上面蓝色背景的输出就是通过log4net配置输出的sql log。另外,这个EFProviderWrappers不仅仅提供让我们输出log这些功能,还有很重要的功能就它的缓存,下一篇文章里我将重点介绍如何使用EFProviderWrappers 实现数据缓存。
分享到:
相关推荐
Entity Framework完整版教程,从初级到中级,再到高级,循序渐进。
学习ADO.NET Entity Framework的好文档。
微软ado.net最新技术,实体框架(entity framework)扩展
数据ADO.NET sql、LINQ to sql、ADO.NET Entity Framework(EF)数据库连接性能比较,主要比较了插入与读取的时间,读取里可以进行模糊检索
ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案,该插件为4.1版本
ADO.NET Entity Framework使用封装示范代码,这个中封装可以提高开发效率
ADO.NET Entityframework dbcontext a
ADO.NET Entity Framework CodeFirst 如何利用 EFProviderWrappers 输出日志(EF4.3) http://blog.csdn.net/fangxinggood/article/details/7665000
ADO.NET Entity Framework概述PPT讲解,已经学习,好东西、分享
最近ado.net entity framework 电子书,入门学习的最佳书籍
ADO.NET EntityFramework入门教程,分别讲解Storage Provider ,Mapping Layer ,Object Services,LINQ to Entities 四层如何设计使用
ADO.NET Entity Framework 增删改查语句句法
ADO.NET Entity Framework 入门示例向导
中新增的数据访问层设计技术ADO.NET Entity Framework。ADO.NET的LINQ to Entity部分以LINQ 为基础,为了完整性本文档首先介绍LINQ技术 Entity Framework 教程 目录 预备知识 2 LINQ技术 2 LINQ...
利用ADO.net entity framework+Linq实现的学习源代码---利用ADO.net entity framework+Linq实现的学习源代码
利用ado.net entity framework快速开发信息管理---利用ado.net entity framework快速开发信息管理
ADO.NET EntityFramework 实体完整版教程,从初级到中级,再到高级,循序渐进。
ADO.NET Entity Framework Domain-Driven
一个ado.net entity framework实例,其中包含一个建立sql server相关表的sql文件