VS2013UP4用EF6连接MySql解决方案

  最近,自己打算自己搭建一个通用权限管理系统,并打算完成后进一步扩展成一个OA系统,完成之后会专门写一篇博客来介绍,在此不多讲。
  在开发过程中,我DAL层采用了Ado.Net+ORM-EF6混合使用的策略,意图无论采用何种方式均能实现跨数据库,实体层由EF6生成。用EF连接SqlServer时没有任何问题,一切顺利,但从昨天中午开始,当我打算连接MySql数据库时遇到了问题。经过百度、Bing、Google,浏览了CSDN、博客园、官方文档和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、谷歌、博客园的找找看,发现大伙的解决方案无论是抄的还是转的,基本都是一个人写的,原帖地址在这

 您的项目引用了最新实体框架;但是,找不到数据链接所需的与版本兼容的实体框架数据库 EF6使用Mysql的技巧

但我照着装过之后仍旧是这个样子,没能解决,就卡住了。后来眼见国内网站无望,打开了我的小飞机(ShadowSocks),专心Google,终于在StackOverFlow上看到这么一篇文章,地址如下:

Can't use a MySQL connection for entity framework 6

里面有说这么做的,也就是上面的第六步

试了之后没效果.....摔!!!!

然后有个帅哥这样回复:

于是我就去下载了微软的EF工具(毕竟亲儿子T^T,待遇就是不一样)

然后装上,也就是上面的第三步,然后就OK啦,愉快的出现了下面的界面:

(注意看连接字符串,在没装EFTools之前,抽风的也有过一次没有报EF6.X不能用那个界面,连接字符串大概是这样子)

对不起当时忘记截图了,被遮住了,连接字符串就像自己在Ado里手写时的样子。

到此,第一个问题就解决了。

额外说一句! 

AppConfig不用自己改啊!!!

我看网上清一色的都说改Provider节点啊!!!

当你用NuGget装上MySql.Data.Entity,会自动修改AppConfig,只要你点覆盖重新加载就好啊!!!

-------------------------------------------我是分割线------------------------------------------

但是 我接下来又遇到了第二个问题(怪我脑残)

然后又去搜索了一下

看到有这么一篇文章

   VS2012+EntityFramework 6+mysql

原来是我自己没修改DDL生成模板T^T

然后修改一下,如下图:

还不行,它说

没有找到固定名称'MySql.Data.MySqlClient ' 的ADO.NET提供程序的实体框架提供程序

然后我又在网上查了一下,找到了一个解决方案,也就是第五条,加上

[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]

这样之后,还出错,错误信息变了:

成了NullReference异常,我就又去找,最终在MySql官网跟StackOverFlow找到了这么两个帖子

Entity Framework database generation error

MySqlBug报告

然后并没有解决,看意思是MySql的一个Bug,我只能先放下。

也希望大家谁有解决方案能告诉我,万分感谢!

-------------------------------2016.03.22更新-----------------------------

自己重新建立了一个测试项目,无论从“数据库更新模型”还是“根据模型生成数据库,都没出现问题”,

证明之前的错误可能是由于自己项目中某个地方出现的错误,为人为因素导致。

故,以上解决方案可完美解决EF6连接Mysql问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值