Z.EntityFramework.Plus.EF6兼容Entity Framework Profiler和MiniProfiler


使用Entity Framework ProfilerMiniProfiler会导致Z.EntityFramework.Plus.EF6识别数据库类型发生错误,从而导致生成的SQL不能正常执行,根本原因推测是“Entity Framework ProfilerMiniProfiler”重写了EF的DBContext或Z.EntityFramework.Plus.EF6获取程序集时出错,而“Z.EntityFramework.Plus.EF6”是根据实现DBContext类命名空间、名称来判断数据库类型的,所以导致识别出错的问题,以MiniProfiler举例,如下图:

经过多次尝试,可以这样解决冲突:下载Z.EntityFramework.Plus.EF6源码,把判断数据库类型的几件代码如下:
 

bool isMySql = command.GetType().FullName.Contains("MySql");
var isSqlCe =  command.GetType().Name == "SqlCeCommand";
var isOracle =  command.GetType().Namespace.Contains("Oracle");
var isPostgreSQL = command.GetType().Name == "NpgsqlCommand";
var isSQLite =  command.GetType().Namespace.Contains("SQLite");
var isHana =  command.GetType().Namespace.Contains("Hana");

 
上面是原代码,需要调整,我是像这样调整的:

bool isMySql =   command.GetType().FullName.Contains("MySql") || ConfigurationManager.AppSettings["DBTYPE"]== "MySql";
var isSqlCe =  command.GetType().Name == "SqlCeCommand" || ConfigurationManager.AppSettings["DBTYPE"] == "SqlCeCommand";
var isOracle =  command.GetType().Namespace.Contains("Oracle") || ConfigurationManager.AppSettings["DBTYPE"] == "Oracle";
var isPostgreSQL =  command.GetType().Name == "NpgsqlCommand" || ConfigurationManager.AppSettings["DBTYPE"] == "NpgsqlCommand";
var isSQLite =  command.GetType().Namespace.Contains("SQLite") || ConfigurationManager.AppSettings["DBTYPE"] == "SQLite";
var isHana =  command.GetType().Namespace.Contains("Hana") || ConfigurationManager.AppSettings["DBTYPE"] == "Hana";

在尽量不改变原代码的情况下加一个参数,毕竟正式部署后项目中不会再包含Entity Framework ProfilerMiniProfiler,原代码是可以正常判断数据库类型的,所以原有的代码应当保留,配置文件中添加参数,如下:

<appSettings>    
  <!--
  数据库类型,用于开发阶段兼容Z.EntityFramework.Plus.EF6判断数据库类型,
  取值:MySql|Oracle|SQLite|SqlCeCommand|Hana|NpgsqlCommand
  -->
  <add key="DBTYPE" value="MySql"/>
</appSettings>


如果确认项目中不会用其他库,比如只用mysql,像这样暴力调整也是可以的:

bool isMySql = true;//假如你项目用的mysql数据库
var isSqlCe = false;
var isOracle = false;
var isPostgreSQL = false;
var isSQLite = false;
var isHana = false;

 

调整完代码重新编译发部原项目,引用新的DLL即可,如果你没时间可直接下载我编译好的,见本文中资源下载链接。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值