项目配置:ef6+mysql5.6(5.6.x , 5.7.3可以,但是5.7.9不行)+mono4.2+ubuntu15.1
准备工作:(注意 mysql版本)提前下载并安装好mysql for vs 插件 详情 插件下载
1)建项目-----》选择.net4.0 mvc项目
2)EntityFramework更新到最新
3)下载最新的mysql-connector-net-6.9.8-noinstall,解压到然后找到对应.net版本的dll文件(5个),添加引用到项目中
4) 把对应的web.config中的entityFramework节点修改为下面(注意版本号Version=x.x.x,要与MySql.Data.dll一致):
<entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="v12.0" /> </parameters> </defaultConnectionFactory> <providers> <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider> </providers> </entityFramework> <!--linux下面需要加上下面这一段system.data,windows下面可以不加--> <system.data> <DbProviderFactories> <!--为防止重复。windows下面重复添加会报错,先移除,再添加--> <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=6.9.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> </DbProviderFactories> </system.data>
改后如配置图
5) 添加实体模型,如下系列图:
6) 编译--->发布到服务器(windows或linux下面都尝试一下)--->重启web服务器--->浏览
结束!!!
以下为常见问题:
问题1:VS2013中,EntityFramework连接mysql生成实体的过程,选择链接地址后,对话框闪退。
解决: MySql Connector Net 的版本和 MySql.Data.dll的版本不兼容 ,下载最新的
MySql Connector Net下载地址:http://cdn.mysql.com//Downloads/Connector-Net/mysql-connector-net-6.9.8.msi
MySql.Data.dll的下载地址:http://dev.mysql.com/downloads/connector/net/ 点击下载(文件名mysql-connector-net-6.9.8-noinstall.zip,注意Select Platform:.net&mono)
先解压mysql-connector-net-6.9.8-noinstall.zip,把版本对应的dll添加到项目中-----》安装mysql-connector-net-6.9.8.msi
问题2:添加数据库实体模型的时候,出现报错:由于出现以下异常,无法生成模型:“表“TableDetails”中列“IsPrimaryKey”的值为DbNull
解决:我用的是mysql 5.7.9,出错了,然后换成5.7.3,或5.6.X 等版本就好了。
问题3:发布到linux mono上其他类错误,一般就解决方式就是 1)mysql-connector-net-6.9.8-noinstall.zip解压后重新引用项目 2)添加/检查<system.data>节点
问题4:mysql服务器在ubuntu上面无法远程的问题
解决:
第一步:允许配置mysql,让root账号允许远程
登陆mysql命令:mysql -u root -p
更改Root账号:UPDATE user SET `Host` = '%' WHERE `User` = 'root' LIMIT 1;
刷新缓存:flush privileges;
第二步:配置mysql,不让他仅仅监听127.0.0.1
进入指定的目录:cd /etc/mysql/mysql.conf.d
打开mysqld.cnf文件:sudo gedit mysqld.cnf
然后找到bind-address所在的行(当前bind-address=127.0.0.1),直接改为#bind-address=127.0.0.1,就是注释掉