VS2019 +MySQL+EntityFramework 使用配置与坑点避免随记
一、安装运行环境
- 首先我们到mysql的官方网站上下载 mysql-installer-community-8.0.26.0 ,或者其他特定版本,通过它我们可以先将 mysql-for-visualstudio 与 mysql-connector-net 安装好。
- 然后通过NuGet 安装 MySql.Data.EntityFramework ,安装时 VS 将会自动安装其他相关依赖。
- 注意:第一个坑点来了,我们要保证MySql.Data 、MySql.Data.EntityFramework 一定要与 mysql-connector-net 的版本一致,但同时我们还需保证其版本与 VS2019 程序目录“Microsoft Visual Studio\2019\Professional\Common7\IDE\PrivateAssemblies” 底下 MySql.Data 、MySql.Data.EntityFramework 保持一致,否则在开发创建实体模型时将会出现闪退现象。
我使用的版本是 8.0.18.0 版的。
二、配置文件坑点避免
在完成以上运行环境的安装后,我们需要注意下 App.config 内的配置。
当我在 VS 上调试程序时一切都是那么完美,没问题。OK,让人炸裂的问题来了。什么问题呢?
我将程序打包拿到其他电脑安装。崩……,数据库连接失败。报出以下错误信息
System.ArgumentException: 具有固定名称“MySql.Data.MySqlClient”的 ADO.NET 提供程序未在计算机或应用程序配置文件中注册或无法加载。有关详细信息,请参阅内部异常。 ---> System.ArgumentException: 找不到请求的 .Net Framework Data Provider。可能没有安装。
在 System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName)
在 System.Data.Entity.Infrastructure.DependencyResolution.DefaultProviderFactoryResolver.GetService(Type type, Object key, Func`3 handleFailedLookup)
--- 内部异常堆栈跟踪的结尾 ---
什么情况,怎么会报这个错误?调试运行的时候不是很正常么,怎么到别的地方就崩了?
于是我想了想,是不是运行环境的问题。于是我将 mysql-connector-net 安装在了出问题的电脑上,问题解决了。
但,这不是我想要的结果,毕竟我在做 Sqlite 等其他数据库的开发时可没有这样,还需要在客户机再安装连接器的。是否是哪里配置有问题?
于是内事不决问度娘,外事不决问谷歌。在谷歌无法访问的条件下,我找了大部分,都是说在 App.config 文件中添加以下代码
<system.data>
<DbProviderFactories>
<remove invariant="MySql.Data.MySqlClient" />
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=8.0.18.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
然并卵!!! 当我在开发环境内增加了上面的配置代码,原本开发环境能运行的程序也出现了数据库不能连接的其他错误,而客户机上也仍然不能使用。
当我在安装 mysql-connector-net 后,没修改配置文件的时候,客户机能使用,说明在安装 mysql-connector-net 时,它将某些配置参数写入了某些全局参数文件里去了。
经过安装 mysql-connector-net 的前后分析,我发现,它会在下图的 machine.config 写入全局参数。

而我们需要在 App.config 文件中增加的配置就是它在 machine.config 中写入的信息:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" />
<bindingRedirect oldVersion="6.7.4.0" newVersion="8.0.18.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="MySql.Data.Entity" publicKeyToken="c5687fc88969c44d" culture="neutral" />
<bindingRedirect oldVersion="6.7.4.0" newVersion="8.0.18.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<system.data>
<DbProviderFactories>
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=8.0.18.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
当我们在未安装 mysql-connector-net 的客户机中的App.config 中写入上面参数后,问题解决了。数据库连接上了,程序能正常运行了。
- 注意,坑点又来了,我们的开发环境增加上面的配置后,会报错失败。而这个错误其实是因为我们安装了 mysql-connector-net 导致全局配置与程序配置的重复加载造成的。所以我们应该让程序运行时移除一次配置的参数节点。
我们需要增加移除节点
<remove invariant="MySql.Data.MySqlClient" />
具体位置如下:
<system.data>
<DbProviderFactories>
<remove invariant="MySql.Data.MySqlClient" />
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=8.0.18.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
至此,本次配置算是圆满结束了。原创不易,转载请注明出处。
VS2019 +MySQL+EntityFramework 使用配置与坑点避免随记的更多相关文章
- windows server服务器上mysql远程连接失败的坑
windows server服务器上mysql远程连接失败的坑 背景:趁这阿里云活动,和朋友合伙买了个服务器,最坑的是没想到他买的是windows Server的,反正便宜,将就着用吧,自己装好了wa ...
- mysql读写分离配置(整理)
mysql读写分离配置 环境:centos7.2 mysql5.7 场景描述: 数据库Master主服务器:192.168.206.100 数据库Slave从服务器:192.168.206.200 M ...
- MySQL主从架构配置
MySQL主从架构配置有两台MySQL数据库服务器master和slave,master为主服务器,slave为从服务器,初始状态时,master和slave中的数据信息相同,当master中的数据发 ...
- mybatis-generator:generate 生成代码配置踩坑详解
mybatis-generator:generate 生成代码配置踩坑不少,在此留下笔记以便后续填坑 一.mysql返回时间问题 错误信息: [ERROR] Failed to execute goa ...
- MySQL NULL 使用带来的坑
MySQL 基础篇 三范式 MySQL 军规 MySQL 配置 MySQL 用户管理和权限设置 MySQL 常用函数介绍 MySQL 字段类型介绍 MySQL 多列排序 MySQL 行转列 列转行 M ...
- MySQL CodeFirst的配置与注意事项
mysql+ef的配置相比较mssql+ef来说复杂一些.我的感受就是配置难度在于插件版本造成的各种不兼容问题.另外参考了很多博客,将多个博客里的经验综合才得以实现,因为不是每个人的操作都和那些博客作 ...
- MYSQL多实例配置方法 mysqld_multi方法
在实际的开发过程中,可能会需要在一台服务器上部署多个MYSQL实例,那建议使用MYSQL官方的解决方案 mysqld_multi 1.修改my.cnf 如一个定义两个实例的参考配置: [mysqld_ ...
- MySQL 安装 + 精简 + 配置
MySQL 安装 + 精简 + 配置 下载安装 从官网 下载 Community Edition MySQL 5.6 版本 精简 根目录下只留 [data/bin/share] , my-defaul ...
- Amoeba for MySQL读写分离配置
一. 安装和运行Amoeba 1. Amoeba for MySQL 架构: 2. 验证Java的安装Amoeba框架是基于Java SE1.5开发的,建议使用Java SE1.5以上的版本 ...
随机推荐
- centos7 system自定义服务
1.介绍 centos中service命令与/etc/init.d的关系 service httpd start 其实是启动了存放在/etc/init.d目录下的脚本. 但是centos7的服务管 ...
- 19、lnmp_mysql、nfs组件分离
19.1.LNMP一体机的数据库分离成独立的数据库: 1.根据以上学习过的方法在db01服务器上安装独立的mysql数据库软件: 2.在web01服务器上导出原先的数据库: [root@web01 t ...
- 9.5、zabbix高级操作(1)
在zabbix-web中删除之前所有监控的主机: 1.zabbix自动发现配置: zabbix-server通过扫描指定范围的ip地址发现zabbix-agent并自动添加监控主机,适用于zabbix ...
- 什么样的CRM系统适合以客户为中心的企业?
我们不难发现,现代的企业非常依赖CRM系统,这是因为20%的优质客户能够给企业带来80%的利润,而老客户的推荐可以带来60%的客户增长.那么,什么样的CRM系统适合企业?随着信息技术的发展,客户开始拥 ...
- ansible 任务执行
ansible 任务执行模式 Ansible 系统由控制主机对被管节点的操作方式可分为两类,即adhoc和playbook: ad-hoc模式(点对点模式)• ad-hoc模式(点对点模式) 使用单个 ...
- 资源:Git快速下载路径
Git快速下载地址: 地址:https://npm.taobao.org/mirrors/git-for-windows/
- SpringBoot中如何监听两个不同源的RabbitMQ消息队列
spring-boot如何配置监听两个不同的RabbitMQ 由于前段时间在公司开发过程中碰到了一个问题,需要同时监听两个不同的rabbitMq,但是之前没有同时监听两个RabbitMq的情况,因此在 ...
- easyui的combobox的onChange事件的实现
easyui的combobox的onChange事件的实现,直接上代码: <div style="display:inline;margin-left:15px;"> ...
- ARTS第一周
开始进行的第一周. 1.Algorithm:每周至少做一个 leetcode 的算法题2.Review:阅读并点评至少一篇英文技术文章3.Tip:学习至少一个技术技巧4.Share:分享一篇有观点和思 ...
- Pandas高级教程之:稀疏数据结构
目录 简介 Spare data的例子 SparseArray SparseDtype Sparse的属性 Sparse的计算 SparseSeries 和 SparseDataFrame 简介 如果 ...