一、安装运行环境

  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. .NET Core添加日志插件

    二. 首先控制器的方法中写: private readonly ILogger<fluueController> _logger; public fluueController(ILogg ...

  2. kubernetes源码解析---- apiserver路由构建解析(2)

    kubernetes源码解析---- apiserver路由构建解析(2) 上文主要对go-restful这个包进行了简单的介绍,下面我们通过阅读代码来理解apiserver路由的详细构建过程. (k ...

  3. 处理python中的信号

    什么是信号 信号(signal)-- 进程间通讯的一种方式,也可作为一种软件中断的方法.一个进程一旦接收到信号就会打断原来的程序执行来按照信号进行处理. 简化术语,信号是一个事件,用于中断运行功能的执 ...

  4. Pytest学习笔记10-生成html报告

    前言 在pytest中,如何生成html测试报告呢,pytest提供了pytest-html插件,可以帮助我们生成测试报告,当然,如果希望生成更加精美的测试报告,我们还可以使用allure生成报告,下 ...

  5. WebGPU性能测试分析

    大家好,本文对WebGPU进行性能测试和分析,目的是为了对比WebGL和WebGPU在"渲染"和"计算"两个维度的性能差异,具体表现为CPU性能和FPS性能两个 ...

  6. .obj : error LNK2019: 无法解析的外部符号

    记录一个报错 .obj : error LNK2019: 无法解析的外部符号 "public: void __thiscall 习惯上先去看看 | "#include"语 ...

  7. 8、基本数据类型(dict)

    8.1.字典: 1.字典元素用大括号括起来,用逗号分割每个元素,字典元素是"key:value"的形式 dic = { "k1": 'v1', #键值对 &qu ...

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

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

  9. python 两种排序方法 sort() sorted()

    python中有两种排序方法,list内置sort()方法或者python内置的全局sorted()方法 区别为: sort()方法对list排序会修改list本身,不会返回新list.sort()只 ...

  10. rosbag 初尝试

    overview ROS (Robot Operating System, 机器人操作系统) 提供一系列程序库和工具以帮助软件开发者创建机器人应用软件.它提供了硬件抽象.设备驱动.函数库.可视化工具. ...