当前位置 : 145z游戏站 | 逆水寒 | 技术教程 | 

EntityFramework6 DB First连接MySQL:工具安装与配置全流程

热度:
使用EntityFramework6以DB First方式连接MySQL数据库,需要经历环境准备、包安装、配置文件修正和数据模型生成四个阶段。与SQL Server不同,MySQL并非EF的"亲儿子",配置过程中存在若干必须手动干预的环节。

**准备工具与环境**

开发环境需要Visual Studio 2013及以上版本。MySQL服务端需提前安装并创建好目标数据库。两个关键的MySQL组件必须安装:MySQL for Visual Studio(版本1.1.4或更高)和Connector/Net(版本6.8.3或更高)。这两个组件提供VS中MySQL数据源的可视化支持以及.NET应用程序与MySQL通信的驱动程序。安装时建议选择全部功能,避免后续缺少模块。

**通过NuGet安装EF与MySQL提供程序**

在Visual Studio中打开目标项目,通过程序包管理器控制台执行三条命令:

```
Install-Package EntityFramework
Install-Package MySql.Data.Entity.EF6
Install-Package MySql.Data.Entity -Version 6.9.3
```

执行完第三条命令后,MySql.Data.Entity.EF6和MySql.Data两个包会自动关联安装。使用NuGet安装而非手动引用DLL,可以省去手动配置程序集引用的繁琐步骤。

**修正配置文件中的Provider**

包安装完成后,项目的App.config或Web.config中会自动生成entityFramework节点。但此时直接添加ADO.NET实体模型会报错,因为生成的provider配置存在问题。

需要手动检查并补全以下配置段。在entityFramework的providers节点下,确保存在MySql.Data.MySqlClient的提供程序声明:

```xml
<entityFramework codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6">
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
```

同时需要在system.data节点下配置DbProviderFactories,注册MySQL数据提供程序工厂。配置文件修改完成后,先编译一次项目,确保配置生效。

**添加ADO.NET实体数据模型**

右击项目,选择"添加"→"新建项",选择"ADO.NET实体数据模型",指定模型名称后点击确定。在"选择模型内容"步骤选择"来自数据库的Code First",此选项对应DB First方式生成代码。

点击"新建连接",数据源选择"MySQL Database"。输入服务器地址(localhost或127.0.0.1)、端口3306、用户名、密码,在下拉列表中选择目标数据库。测试连接成功后,选择要导入的数据库表、视图或存储过程。注意不要使用"."代替"localhost",某些版本中会出现连接问题。

**特殊错误处理:ISPRIMARYKEY值为DBNull**

点击完成后若遇到"表'TABLEDETAILS'中的列'ISPRIMARYKEY'的值为DBNull"错误,这是MySQL 5.7及以上版本与EF6配合使用时的已知问题。在MySQL管理工具中执行以下命令:

```
use `你的数据库名`;
set global optimizer_switch='derived_merge=OFF';
```

执行后重启MySQL服务,再重新执行添加实体模型的步骤即可解决。
[顶部]