mysql+ef踩的坑

第一次接触这种方式,碰见了很多坑,在这里总结一下

环境是win7 ,vs2015 mysql5.7

大致步骤:

添加—》新建项—》数据—》ADO.NET实体数据模型—》添加—》从数据库生成—》下一步—》新建连接(连接设置刚刚自己使用的数据库)—》下一步—》选中自己要使用的表,以及视图。存储过程等—》完成

碰见的第一个问题就是下图这个错误

在网上搜到的方法大致如下

1 Install-Package EntityFramework -Version 6.0.0然后Enter
2 Install-Package EntityFramework.zh-Hans -Version 6.0.0
3 Install-Package MySql.Data.Entity.EF6

1和2只要网络是正常的,基本都会成功,但是第三个在执行的时候,通常会报错,如下:

Install-Package : 无法找到程序包“MySql.Data.Entity.EF6”。
所在位置 行:1 字符: 16
+ Install-Package <<<< MySql.Data.Entity.EF6
+ CategoryInfo : NotSpecified: (:) [Install-Package], InvalidOperationException
+ FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PowerShell.Commands.InstallPackageCommand

解决办法:

通过右键项目->添加引用->浏览,把MySQL Connector Net 6.8.3\Assemblies\v4.5下的所有dll文件引用进来,

4 在web.config里面添加provider节点即可:

<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6"></provider>

这个方法第三步里面安装EF6失败,按照解决方法说的进行操作不起作用,另外我的版本是6.9.6,然后直接跳过这个就把第四个节点加进去了,然后测试,发现还是报错

最后通过跟其他mysql+ef项目对比,发现webconfig里面有个配置,是在  <configSections>节点里面的

<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />

加上之后就可以正常创建实体了

重新建了个项目,写下具体的步骤

1、建个MVC的web应用程序,生成一下,没什么问题

2、引用里面添加mysql的引用,路径为C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.6\Assemblies\v4.5

3、修改配置文件,把上面踩坑发现的两个配置都加上,一个section和一个provider,添加引用后section已经自动添加上了,如果没有的话再手动加上

4、然后添加实体,可以正常创建,生成一下项目也没什么问题。

大功告成了

补充:

今天把EntityFramework升级6.2版本后ef模型就出问题了,改动主要有在引用中增加mysql.data和mysql.data.entity.ef6,entityframwork升到6.2,配置文件中改动就是跟新建时的配置一样,section和provider两个地方要改

2019/2/15补充

按照上面步骤生成EF没有问题,生成过程中我没有选择将Web.Config中的连接设置另存为(如:Entities)导致webconfig中没有这个连接字符串,导致打开基础程序失败,这里起的名称Entities是在webconfig中连接字符串里面显示出来并且调用的时候用这个实体名称。Entities db = new Entities();

我刚开始的解决方式是从其他项目粘过来一个连接字符串,修改下里面的数据库连接及实体名称。因为重新生成EF比较麻烦嘛,然后再测试,发现报错,提示无法加载指定的元数据资源,在网上搜了下发现是连接字符串里面的名称不对,我不知道这规则是什么样的,只好重新生成下EF,规则等下再一起讲

生成完之后我以为就好了,发现包里个Access denied for user 'sa'@'localhost' (using password: NO),一看连接字符串没法没有密码,这个是因为我生成实体的过程中选择的否,从连接字符串中排除敏感数据导致的,增加上密码才可以正常使用了。

讲一下生成过程中的几个名称的用处:第一个是添加实体数据模型的时候填写的名称,这个名称就是模型的名称,在webconfig中的metadata中也有用,我有个报错是无法加载指定的元数据资源就是因为这个名称不一致导致的。第二个名称是把连接设置另存为的名称,一般都是以Entities结尾,这个比较重要,在webconfig连接字符串中作为name属性出现,而且调用的时候用这个名称调用模型,最好起个代表性的名称。第三个名称是模型命名空间,生成的实体都在用这个,但是好像没什么关系,可以不用关,用默认的就行。

20190331补充

在vs2017连接mysql数据库的时候出现很多问题,版本最后选用的是推荐的版本

参考网址:https://blog.csdn.net/ght886/article/details/80902457

20190411

今天又碰到这个坑了,不是报错就是闪退

最后用的ef6,mysql 6.9.12

配置里面把那两个地方改好

<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>

只需要这一个就行,多了会出问题,最后也不知道怎么调的就好了

20190423 

mysqlfor vs用的1.2.6,mysql connector net用的6.9.6

ef用的6.2,mysql ef用的6.10.8时会出现闪退,当处于6.9.12时,webconfig里面的provider加版本号时会出现引用最新的实体框架错误,如上面的那个图

20190605

新公司给配了一台新电脑,然后直接下的vs2019,mysql8.0,mysql for vs 用的1.2.8,mysql connector net 用的8.0.16,都是最新版的,然后获取EF时一直闪退,怎么修改也不行,后来把mysql connector net的版本改为6.9.12就可以了

 

20191023

vs2019 mysql8.0, mysql for vs1.2.8,mysql connector net 6.9.12, nuget中ef用6.0,mysql.data用的都是6.9.12

需要注意的是新建连接的时候报错  给定关键字不在字典中 

最后采用的方法是https://www.cnblogs.com/blogzys/p/10045850.html

我的文件位置在C:\Users\11448\AppData\Roaming\Microsoft\VisualStudio\16.0_632dd2b3\ServerExplorer

20200510

vs2019 mysql5.7 mysql for vs1.2.9(刚开始用1.2.8的时候不支持vs2019,只支持vs2017及以前的,安装的时候选custom后查看的),mysql connector net 6.9.12 刚开始这样配置还是不行,后面就突然好了,我估计是刚设置完的时候还没起效

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值