VS2013UP4用EF6连接MySql解决方案
最近,自己打算自己搭建一个通用权限管理系统,并打算完成后进一步扩展成一个OA系统,完成之后会专门写一篇博客来介绍,在此不多讲。
在开发过程中,我DAL层采用了Ado.Net+ORM-EF6混合使用的策略,意图无论采用何种方式均能实现跨数据库,实体层由EF6生成。用EF连接SqlServer时没有任何问题,一切顺利,但从昨天中午开始,当我打算连接MySql数据库时遇到了问题。经过百度、Bing、Google,浏览了****、博客园、官方文档和StackOverFlow以及其它网站之后,解决了这个问题。
首先摆出解决方案,如果没有耐心看,可以只关注前面这部分:
1、安装mysql-for-visualstudio-1.2.6(我用的目前最新版)
2、安装mysql-connector-net-6.9.8(我用的目前最新版)
3、安装EFTools6.1.3ForVS2013
4、切到Entity层,在NuGget程序包管理控制台中分别输入以下命令:
1) install-package entityframework
2)install-package mysql.data.entity
这两部执行完成后应该会自动安装EF6.1.3及其语言包和MySql6.9.8.0的程序包,如果没有安装语言包,可继续手动输入
3)Install-Package EntityFramework.zh-Hans 同样是6.1.3版本
5、修改edmx的Context.tt模板文件,在类的上方加如下标记 (后来测试发现这句可以不加,加了也没什么错)
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
结果如图:
6、将 C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.8\Assemblies\v4.5 下的
MySql.Data.dll MySql.Data.EF6.dll拷到
C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies下替换(需要管理员权限)
7、切换生成模板为SSDLToMySQL.tt(VS)
好了,齐活。
--------------------------------------------------------------------------------------------------------
以下是具体过程
--------------------------------------------------------------------------------------------------------
这是我Entity层的截图。
当我试图连接MySql时,遇到的第一个问题是,新建连接里面没有MySql.....它是这个样子的
好吧,这个问题很容易解决,百度一下,把步骤一跟二做一遍就好啦。
当我装上之后就碰到了一个大的拦路虎,它是这样的
我从昨天中午12点,一直到晚上一直在跟它做斗争,百度、Bing、谷歌、博客园的找找看,发现大伙的解决方案无论是抄的还是转的,基本都是一个人写的,原帖地址在这
但我照着装过之后仍旧是这个样子,没能解决,就卡住了。后来眼见国内网站无望,打开了我的小飞机(ShadowSocks),专心Google,终于在StackOverFlow上看到这么一篇文章,地址如下:
里面有说这么做的,也就是上面的第六步
试了之后没效果.....摔!!!!
然后有个帅哥这样回复:
于是我就去下载了微软的EF工具(毕竟亲儿子T^T,待遇就是不一样)
然后装上,也就是上面的第三步,然后就OK啦,愉快的出现了下面的界面:
(注意看连接字符串,在没装EFTools之前,抽风的也有过一次没有报EF6.X不能用那个界面,连接字符串大概是这样子)
对不起当时忘记截图了,被遮住了,连接字符串就像自己在Ado里手写时的样子。
到此,第一个问题就解决了。
额外说一句!
AppConfig不用自己改啊!!!
我看网上清一色的都说改Provider节点啊!!!
当你用NuGget装上MySql.Data.Entity,会自动修改AppConfig,只要你点覆盖重新加载就好啊!!!
-------------------------------------我是分割线---------------------------------------------
但是 我接下来又遇到了第二个问题(怪我脑残)
然后又去搜索了一下
看到有这么一篇文章
原来是我自己没修改DDL生成模板T^T
然后修改一下,如下图:
还不行,它说
没有找到固定名称'MySql.Data.MySqlClient ' 的ADO.NET提供程序的实体框架提供程序
然后我又在网上查了一下,找到了一个解决方案,也就是第五条,加上
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
这样之后,还出错,错误信息变了:
成了NullReference异常,我就又去找,最终在MySql官网跟StackOverFlow找到了这么两个帖子
Entity Framework database generation error
然后并没有解决,看意思是MySql的一个Bug,我只能先放下。
也希望大家谁有解决方案能告诉我,万分感谢!
-------------------------------2016.03.22更新-----------------------------
自己重新建立了一个测试项目,无论从“数据库更新模型”还是“根据模型生成数据库,都没出现问题”,
证明之前的错误可能是由于自己项目中某个地方出现的错误,为人为因素导致。
故,以上解决方案可完美解决EF6连接Mysql问题。
Mr.Han
2016-03-20
转载于:https://www.cnblogs.com/hanqingrui/articles/5297998.html