EF6与Mysql疑难问题记录
这几天公司架构调整,新的迭代后端使用了ABP框架与CodeFirst模式,执行过程中遇到了一个非必现很难定位的问题,特此记录。
现象
在程序访问MySql数据库时报了异常
System.InvalidOperationException: The default DbConfiguration instance was used by the Entity Framework before the 'MySqlEFConfiguration' type was discovered. An instance of 'MySqlEFConfiguration' must be set at application start before using any Entity Framework features or must be registered in the application's config file.
在StackOverflow上找了很多解决方案,都找不到可靠的原因分析,折腾许久终于在官方文档上找到了答案。
原因
先来看下官方文档的一段解释:
(https://msdn.microsoft.com/en-us/data/jj680699#Moving)
There are some situations where configuration may be needed before any DbContext type has been used. Examples of this include:
- Using DbModelBuilder to build a model without a context
- Using some other framework/utility code that utilizes a DbContext where that context is used before your application context is used
In such situations EF is unable to discover the configuration automatically and you must instead do one of the following:
- Set the DbConfiguration type in the config file, as described in the Moving DbConfiguration section above
- Call the static DbConfiguration.SetConfiguration method during application startup
在括号内给出的官方文档地址中包含了两种指定DbContext配置的方式:
一,Config节点
二,DbConfigurationType特性标注在DbContext上
我们选择的是第二种方式,即指定类型后自动配置的方式。代码片段如下:
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
public class SHMedicalRecordDbContext : AbpDbContext
{
......
}
这在独立项目中是毫无问题的,但混入以前的项目就出现了开题所报的错误,问题如官方那段解释中某些不会自动配置的情况之二:某些框架或通用代码在程序调用DbContext之前就使用了它。
怎么理解这个问题,我们项目组的情况是:
遗留系统也用了EF6,新迭代所开发的系统需要嵌入老系统来使用,那么在老系统中就存在了两个DbContext,如果新系统的DbContext先被初始化,那程序不会有问题。
若遗留系统的Context先初始化,就符合了官方描述的情况之二,所以出现了异常。(新系统的初始化采用的多线程启动,所以前后顺序每次启动服务都不一样)
解决方法
解决方法也在刚才那段文字的下面,采用Config或者静态初始化的方式显式指定DbConfiguration,然后我在Config的EF节点中添加了指定,代码片段如下:
<entityFramework codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6">
.......
问题解决。
留点东西方便后来踩坑的人。
另,EF+MySql做CodeFirest相性实在不太好(Oracle也差不多),自动迁移时各种水土不服,有条件的公司还是建议上MsSql。
EF6与Mysql疑难问题记录的更多相关文章
- VS2015 +EF6 连接MYSQL数据库生成实体
VS2015 +EF6 连接MYSQL数据库生成实体 已安装软件:VS2015 XAMPP Control Panel(Mysql服务器) ...
- Entity Framework EF6使用 MySql创建数据库异常解决办法
EF6使用MySQL数据库时,第一次创建数据库出现“Specified key was too long; max key length is 767 bytes”错误,解决办法请见以下连接. htt ...
- VS2013使用EF6与mysql数据库
您的项目引用了最新实体框架:但是,找不到数据链接所需的与版本兼容的实体框架数据库 EF6使用Mysql的技巧 在vs2013中使用mysql连接entityFramework经常会遇到这个问题 ...
- 您的项目引用了最新实体框架;但是,找不到数据链接所需的与版本兼容的实体框架数据库 EF6使用Mysql的技巧
转载至: http://www.cnblogs.com/Imaigne/p/4153397.html 您的项目引用了最新实体框架:但是,找不到数据链接所需的与版本兼容的实体框架数据库 EF6使用Mys ...
- MySQL高效获取记录总数
通常mysql获取查询记录总数我们使用如下语句: SELECT COUNT(*) FROM users WHERE k='avs'; 或:SELECT id FROM goods WHERE k=' ...
- CentOS7.4安装MySQL踩坑记录
CentOS7.4安装MySQL踩坑记录 time: 2018.3.19 CentOS7.4安装MySQL时网上的文档虽然多但是不靠谱的也多, 可能因为版本与时间的问题, 所以记录下自己踩坑的过程, ...
- [争什么! 掺在一起做撒尿牛丸啊! 笨蛋]ASP.NET Core 2.0 + EF6 + Linux +MySql混搭
好消息!特好消息!同时使用ASP.NET Core 2.0和.NET Framework类库还能运行在linux上的方法来啦! 是的,你没有看错!ASP.NET Core 2.0,.NET Frame ...
- Vs2013 使用EF6 连接mysql数据库
最近在使用MySQL数据库,在使用EF框架连接MySQL数据库时发现了一个问题,使用DB First创建实体对象的时候会出现如下图的错误:您的项目引用了最新版实体框架….. (如下图)或者会出现新建实 ...
- VS2017 + EF6连接MySql
VS2017 + EF6连接MySql 原地址:https://blog.csdn.net/mzhifa/article/details/80999105 VS2017 + EF6连接MySql ...
随机推荐
- 使用 Python & Flask 实现 RESTful Web API
环境安装: sudo pip install flask Flask 是一个Python的微服务的框架,基于Werkzeug, 一个 WSGI 类库. Flask 优点: Written in Pyt ...
- 运用GRASP原则来做uml交互类图-------pos机实例
重要的几个GRASP原则:1.控制器模式 2.创建者模式 (原则)3.信息专家模式(原则) 4. 高内聚 低耦合 这里所说的模式并不是java中针对具体的事件的设计模式 主成功场景的几个操作: ...
- POJ 3625 最小生成树 Prim C++
Building Roads Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11861 Accepted: 3376 D ...
- virtualbox修改主机名
virtualbox修改主机名 /etc/hostname /etc/hosts
- dotnet core 2.0在ubuntu下安装失败
在ubuntu下安装.net core2.0失败了,不知道是什么原因.按照微软官方的步骤.似乎走不通.偶然翻到debian的安装方法,发现debian系统居然是直接下载包安装的.没经过apt.尝试一把 ...
- 浅谈大数据和hadoop家族
按照时间的早晚从大数据出现之前的时代讲到现在.暂时按一个城市来比喻吧,反正Landscape的意思也大概是”风景“的意思. 早在大数据概念出现以前就存在了各种各样的关于数学.统计学.算法.编程语言的研 ...
- JVM菜鸟进阶高手之路七(tomcat调优以及tomcat7、8性能对比)
转载请注明原创出处,谢谢! 因为每个链路都会对其性能造成影响,应该是全链路的修改压测(ak大神经常说全链路!).本次基本就是局域网,所以并没有怎么优化,其实也应该考虑进去的. Linux系统参数层面的 ...
- Spring常用注解介绍【经典总结】
Spring的一个核心功能是IOC,就是将Bean初始化加载到容器中,Bean是如何加载到容器的,可以使用Spring注解方式或者Spring XML配置方式. Spring注解方式减少了配置文件内容 ...
- MySQL innodb引擎下根据.frm和.ibd文件恢复表结构和数据
记录通过.frm和.ibd文件恢复数据到本地 .frm文件:保存了每个表的元数据,包括表结构的定义等: .ibd文件:InnoDB引擎开启了独立表空间(my.ini中配置innodb_file_per ...
- mysql客户端(Navicat)远程登录操作遇到问题1142
遇到此问题的原因是:用户user对数据库test 无权限操作. 解决方法:mysql> grant all privileges on test.* to user@'localhost' id ...