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以上的版本 ...
随机推荐
- Unity 添加,修改默认创建脚本模板
Unity 默认创建的脚本可以添加也可以修改,不需要修改Editor. 一.找到模板目录 \Editor\Data\Resources\ScriptTemplates 二.如果要修改模板,直接打开修改 ...
- Auto.js无障碍免root脚本开发学习
Auto.js 简单入门 官方文档:https://hyb1996.github.io/AutoJs-Docs/#/ https://blog.csdn.net/QiHsMing/article/de ...
- cache之guava
本文主要记录guava_cache的学习心得! 缓存是什么?为何要用缓存呢? 先参考下图! 这是一张小白图!简单形容了一个普普通通的服务端请求的处理模型! 当一个request请求通过网络不远千里的来 ...
- 使用命令行操作MySQL 及 语法
在使用之前先要确保服务中的MySQL 已启动,否则会报错:ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061 ...
- mac 中一些日常小问题与快捷键
1.备忘录中的中英文符号问题 比如:在备忘录中使用英文符号时,总是会被自动的修改为中文符号 解决方法:系统偏好设置-键盘-文本,去选"使用智能引号和存折号" p.p1 { marg ...
- linux学习之路第二天(xshell和xftp的使用图解)
以上xshell的连接过程 2.远程上传和下载文件xftp6 一定要换成22和sftp,否则连接不上 如果出现中文乱码的情况 先点击那个小齿轮 再点击选项 把编码编程UTF-8就ok了
- spring boot框架相关知识
1.spring:一个轻量级的控制反转和面向切面的容器,专业的开发Web项目的开源框架. spring mvc:是基于spring的mvc框架,属于一个企业WEB开发的MVC框架,涵盖面包括前端 ...
- 74cms v5.0.1 前台sql注⼊复现
漏洞简介 74cms 5.0.1 前台AjaxPersonalController.class.php存在SQL注⼊ 复现过程 具体信息 文件位置 74cms\upload\Application\H ...
- ACM金牌选手算法讲解《线性表》
哈喽,大家好,我是编程熊,双非逆袭选手,字节跳动.旷视科技前员工,ACM亚洲区域赛金牌,保研985研究生,分享算法与数据结构.计算机学习经验,帮助大家进大厂~ 公众号:『编程熊』 文章首发于: ACM ...
- python使用笔记10--os,sy模块
os操作文件,可以输入绝对路径,也可以输入相对路径 windows使用路径用\连接 Linux使用路径用/连接 但是我的电脑是windows 用/也没问题 1.os常用方法 1 import os 2 ...