一、安装运行环境

  1. 首先我们到mysql的官方网站上下载 mysql-installer-community-8.0.26.0 ,或者其他特定版本,通过它我们可以先将 mysql-for-visualstudio 与 mysql-connector-net 安装好。
  2. 然后通过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 使用配置与坑点避免随记的更多相关文章

  1. windows server服务器上mysql远程连接失败的坑

    windows server服务器上mysql远程连接失败的坑 背景:趁这阿里云活动,和朋友合伙买了个服务器,最坑的是没想到他买的是windows Server的,反正便宜,将就着用吧,自己装好了wa ...

  2. mysql读写分离配置(整理)

    mysql读写分离配置 环境:centos7.2 mysql5.7 场景描述: 数据库Master主服务器:192.168.206.100 数据库Slave从服务器:192.168.206.200 M ...

  3. MySQL主从架构配置

    MySQL主从架构配置有两台MySQL数据库服务器master和slave,master为主服务器,slave为从服务器,初始状态时,master和slave中的数据信息相同,当master中的数据发 ...

  4. mybatis-generator:generate 生成代码配置踩坑详解

    mybatis-generator:generate 生成代码配置踩坑不少,在此留下笔记以便后续填坑 一.mysql返回时间问题 错误信息: [ERROR] Failed to execute goa ...

  5. MySQL NULL 使用带来的坑

    MySQL 基础篇 三范式 MySQL 军规 MySQL 配置 MySQL 用户管理和权限设置 MySQL 常用函数介绍 MySQL 字段类型介绍 MySQL 多列排序 MySQL 行转列 列转行 M ...

  6. MySQL CodeFirst的配置与注意事项

    mysql+ef的配置相比较mssql+ef来说复杂一些.我的感受就是配置难度在于插件版本造成的各种不兼容问题.另外参考了很多博客,将多个博客里的经验综合才得以实现,因为不是每个人的操作都和那些博客作 ...

  7. MYSQL多实例配置方法 mysqld_multi方法

    在实际的开发过程中,可能会需要在一台服务器上部署多个MYSQL实例,那建议使用MYSQL官方的解决方案 mysqld_multi 1.修改my.cnf 如一个定义两个实例的参考配置: [mysqld_ ...

  8. MySQL 安装 + 精简 + 配置

    MySQL 安装 + 精简 + 配置 下载安装 从官网 下载 Community Edition MySQL 5.6 版本 精简 根目录下只留 [data/bin/share] , my-defaul ...

  9. Amoeba for MySQL读写分离配置

    一.      安装和运行Amoeba 1. Amoeba for MySQL 架构: 2. 验证Java的安装Amoeba框架是基于Java SE1.5开发的,建议使用Java SE1.5以上的版本 ...

随机推荐

  1. OSPF路由协议

    一.OSPF的工作过程 二.OSPF的基本概念 三.DR与BDR 四.OSPF数据包类型 五.OSPF邻接关系的建立 六.OSPF的路由器类型 一.OSPF的工作过程 OSPF路由协议针对每一个区域分 ...

  2. 『心善渊』Selenium3.0基础 — 14、Selenium对单选和多选按钮的操作

    目录 1.页面中的单选按钮和多选按钮 2.判断按钮是否选中is_selected() 3.单选按钮的操作 4.多选按钮的操作 5.选择部分多选按钮的操作 1.页面中的单选按钮和多选按钮 页面中的单选按 ...

  3. P2P技术(2)——NAT穿透

    P2P可以是一种通信模式.一种逻辑网络模型.一种技术.甚至一种理念.在P2P网络中,所有通信节点的地位都是对等的,每个节点都扮演着客户机和服务器双重角色,节点之间通过直接通信实现文件信息.处理器运算能 ...

  4. Docker搭建Prometheus+grafana监控系统

    一.Prometheus简介 1.简介 Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB). Prometheus使用Go语言开发,是Google BorgM ...

  5. CentOS6.5 mini安装到VirtualBox虚拟机中

    下载Oracle VM VirtualBox 下载下来安装 下载镜像 http://archive.kernel.org/centos-vault/6.5/isos/i386/CentOS-6.5-i ...

  6. SpringBoot:SpringBoot中@Value注入失败

    1. 第一步检测语法是否正确 @Value("${test}") private String test; 2.第二步检测配置文件中是否有进行配置 url=testusername ...

  7. pdm文件name与comment互相同步

    1.使用Powerdesigner工具将pdm文件的name同步至comment. 点击Tools->Execute Commands->Edit/Run Scripts 输入脚本: Op ...

  8. python链接postgresql

    #需要安装的库 sudo apt-get install build-dep python-psycopg2 pip install psycopg2 #!/usr/bin/python # -*- ...

  9. Python小白的数学建模课-B4. 新冠疫情 SIR模型

    Python小白的数学建模课-B4. 新冠疫情 SIR模型 传染病的数学模型是数学建模中的典型问题,常见的传染病模型有 SI.SIR.SIRS.SEIR 模型. SIR 模型将人群分为易感者(S类). ...

  10. 关于Hadoop调优

    Hadoop生产调优 一.HDFS-核心参数 1.NameNode 内存生产配置 1) NameNode 内存计算 每个文件块大概占用 150byte,一台服务器 128G 内存为例,能存储多少文件块 ...