只为成功找方向,不为失败找借口

每天都不能停止前进的脚步
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

 vs2015连接mysql数据库常见问题

          最近在vs2015用asp.net开发一个网站,要连接mysql数据库,于是百度了一下相关配置的文章,有好几篇文章说了相关步骤,但是我装的时候还是遇到了问题,在这里总结一下配置的过程中可能会出现的问题以及本人摸索出来的一些处理方法。

         在此之前提供一下,我在配置过程中看到的别人对于vs2015连接mysql数据库相关步骤的好文连接:

 
https://www.cnblogs.com/RushPasser/p/5438334.html        

 

http://www.ituring.com.cn/article/211529?utm_source=tuicool&utm_medium=referral 
http://blog.csdn.net/mynewdays/article/details/75194267 
 
下面开始正文:
       按照前面相关配置我们基本可以知道整个配置过程中要安装的东西了,分别有:MySQL for Visual Studio、MySQL Connector Net、MySQL.data、MySQL.data.entity、EntityFrameword。前面两个属于MySQL数据库的插件,它们的作用本人是这样理解的:MySQL for Visual Studio可以让vs识别到MySQL; MySQL Connector Net 使vs中的.net平台能够与MySQL数据库建立连接。这两个插件的安装没啥问题,直接默认安装就行。接下来是用NuGet安装Mysql.data、Mysql.data.entity、EntityFramework。这三个东西的安装就要注意了,不然会让你在创建实体类的时候各种报错,甚至不能完全将它们都安装上。正确的安装顺序是:直接安装MySql.data.entity就行,其他的不用再单独安装。为啥呢?因为它要依赖其他两个才行,所以系统会自动帮你把mysql.data和EntityFramework都安装上。作为一个新手,我肯定是很理所当然地按顺序安装了。那么各种坑爹就免不了了。
下面是各种错误以及解决方法:

一、安装程序包相关的错误

如果先安装Mysql.data会出现如下问题:
1、无法再安装Mysql.data.entity和EntityFramework。Mysql.data顺利安装完成,兴高采烈地进行下一步,安装Mysql.data.entity。结果系统提示如下错误:
 
可以看到这个错误是由安装MySql.Data引起的,因为安装Mysql.data.entity的时候它会帮你安装它的依赖项,它的依赖项如下图红色方框所示:
 
由于我已经安装了MySQL.data,所以再次安装会冲突。好了,既然问题很明白了,那么我们卸了MySQL.data,再重新安装MySQL.data.entity就可以了呗。想法很合理,但是你卸载时,你就知错。错误如2、所示;
2、无法卸载Mysql.data。报错如下图所示:
 
傻眼了,还不能卸载了。现在是装不上,又卸不了。一番折腾后,得到解决方法如下:这里虽然提示错误无法卸载,但是我们是程序员呀,没啥是直接精准强删决解不了的卸载。在此之前我们首先要知道mysql.data、mysql.data.entity、EntityFramework的本质是啥,他们都是开发工具包,里面都是一些库类或者一些api啥的,所谓的安装只不过是将他们导入我们的工程环境中,供我们后续开发调用而已。那么我们就可以把它们从我们的项目中移除了。要删除的文件有如下红框画出来的三个:
 
把上面这三个文件干掉再重新打开一次NuGet发现已安装的程序包里面没有Mysql.data了,好了,接下来就可以按照前面所说直接安装MySql.data.entity了。emm~其实还有另外一个办法可以让你在安装了MySQL.data之后也能正确安装MySql.data.entity,还记得它为什么安装不了吗?是因为已经安装了MySQL.data,而MySql.data.entity还想要安装它,那么我们可以让MySql.data.entity不安装MySql.data不就可以了吗。做法是如下:
 
将MySql.data.entity的依赖项行为选为如图所示。这样他就不会连同他的依赖项一起安装了。嘻嘻嘻,是不是有点恍然大悟的感觉,现在你知道所谓的依赖项是啥意思了吧。而为什么安装MySql.data.entity的时候后会帮你安装其他两项依赖项了吧,就是因为这个安装选项的问题。理解了这一点,你就能更加明白这个安装的过程。
 
 

二、MySQL创建实体类闪退以及EF不兼容问题的决解思路

(1)MySQL创建实体类闪退的决解方法

有的时候就算mysql.data.entity和MySQL Connector Net版本保持一致了,在创建实体类的时候还是会出现闪退的问题,关于这个问题也是让人蛋疼呀,我被这个问题折腾的不轻。出现这个问题的原因可能是mysql.data.entity和MySQL Connector Net的版本与mysql数据库版本不匹配,决解方法是换一个更高或者更低一点版本的mysql.data.entity和MySQL Connector Net试试,再不行就多试几个,总有一个本版是不会闪退的。例如,我的mysql是5.6版本的,mysql.data.entity和MySQL Connector Net都是6.8.8,就不会闪退。总之,如果出现了闪退,而mysql.data.entity和MySQL Connector Net的版本已经一致了,那么就可以试试换一个高一点或者低一点的版本试试。


(2)MySQL创建实体类遇到EF不兼容问题的决解思路

决解了闪退问题,你还有可能在创建实体类的时候遇到一个问题,那就是实体框架不兼容问题,具体的报错如下:
这里提示EntityFramework(实体框架)与建立数据库连接所需用到的版本不兼容,其实就是和MySQL.data.entity的版本不兼容。例如,虽然我已经安装了EntityFramework6.2.0但是这里显示6.X的本版不可用。解决方法是,打开NuGet卸载掉EntityFramework,卸载的时候要把下图的复选框勾上,不然卸载不了。
 
然后再创建实体,这样由于没有安装EntityFramework,所以再到这一步的时候,系统会自动帮你找到相适应的版本,帮你装上,你会看到如下提示:




可以看到系统将为你安装5.x的版本,直接下一步就行。这样实体类的创建就没有啥问题了,功德圆满,双手合十!
 
        到此,你应该能成功创建实体类了。第一次写博客,也着实是因为被这个问题折腾不轻,希望能帮助遇到同样问题的人,就总结了一下。大家一起学习学习嘛。可能有的地方理解不正确,毕竟是我个人摸索出来的,实际上可能并非如此理解的。大家选择性吸收,喜欢就给个赞。转载不用通知我,但请注明出处!