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可视化----------matplotlib.pylot
1 >>> import matplotlib.pyplot as plt 2 >>> plt.axis([0,5,0,20]) 3 [0, 5, 0, 20] 4 ...
- webservice第一篇【介绍、Scoket、http调用、wsimport调用】
WebService介绍 首先我们来谈一下为什么需要学习webService这样的一个技术吧-. 问题一 如果我们的网站需要提供一个天气预报这样一个需求的话,那我们该怎么做????? 天气预报这么一个 ...
- python实例编写(5)--异常处理,截图,用例设计
一.python的异常处理 异常抛出处理机制: 1.若在运行时发生异常,解释器会查找相应的处理语句(handler) 2.若在当前函数无法找到,就将异常传给上层的调用函数,看是否能处理 3.如果在最外 ...
- 三、js的函数
三.函数 函数是定义一次但却可以调用或执行任意多次的一段JS代码.函数有时会有参数,即函数被调用时指定了值的局部变量.函数常常使用这些参数来计算一个返回值,这个值也成为函数调用表达式的值. 1.函数声 ...
- 剑指offer(纪念版)读书笔记【实时更新】
C++ 1.STL的vector每次扩充容量,新容量是前一次的两倍. 2.32位机指针大小为4个字节,64位机指针大小为8个字节. 3.当数组作为函数参数传递时,数组会自动退化成同类型指针. 4. & ...
- [ASP.NET教程] 防止表单重复提交
第一种方法:javascript控制.缺点,一般用户使用没问题,但是懂点js的还是可以强行重复提交.而且,后退再提交,你也没啥办法.第二种方法:服务器控制.后台生成一个token,存入session或 ...
- hdu1878判断欧拉回路
欧拉回路 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- Uva 3708 Graveyard
题意:在周长为10000的圆上等距分布着n个雕塑.现在又有m个新雕塑加入(位置可以随意放),希望所有n+m个雕塑在圆周上均匀分布. 这就需要移动其中一些原有的雕塑.要求n个雕塑移动的距离最小. (2& ...
- VB.NET 中 ComboBox 如何清除选项--- 使用Dataset 赋值 DataSource 的时候
如题: 在 使用Dataset 赋值 DataSource 的时候,网络上很多都是:ComboBox2.DataSource = Null 然并卵,很高兴告诉大家:Null 在VB.NET中是没用的: ...
- spring 内部工作机制(二)
本章节讲Spring容器从加载配置文件到创建出一个完整Bean的作业流程及参与的角色. Spring 启动时读取应用程序提供的Bean配置信息,并在Spring容器中生成一份相应的Bean配置注册表, ...