我们项目需求理的差不多了,在写各种需求文档、数据库文档。考虑搭框架,我先敲个小demo出来实现EF操作MySql数据库。之前做项目都是用SqlServer数据库,考虑之后,这版的重构打算用开源的Mysql数据库,那么底层的EF框架如何去连接Mysql数据库呢?看我一点点演示来。
【理解定义】
ORM,即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法。
实体框架Entity Framework 是 ADO.NET 中的一组支持开发面向数据的软件应用程序的技术。是微软的一个ORM框架。在EF中的实体数据模型(EDM)由以下三种模型和具有相应文件扩展名的映射文件进行定义。
- 概念架构定义语言文件 (.csdl) -- 定义概念模型。R
- 存储架构定义语言文件 (.ssdl) -- 定义存储模型(又称逻辑模型O)。
- 映射规范语言文件 (.msl) -- 定义存储模型与概念模型之间的映射M。
实体框架 使用这些基于 XML 的模型和映射文件将对概念模型中的实体和关系的创建、读取、更新和删除操作转换为数据源中的等效操作。EDM 甚至支持将概念模型中的实体映射到数据源中的存储过程。
【操作步骤】
1.下载需要的Windows Installer的数据包
安装mysql-connector-net-6.8.7.msi,下载地址:http://dev.mysql.com/downloads/connector/net/6.8.html
安装mysql-for-visualstudio-1.2.6.msi,下载地址:http://dev.mysql.com/downloads/windows/visualstudio/1.2.html
安装EFTools6.1.3ForVS2012.msi,下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=40762,如果VS为2013,则下载EFTools6.1.3ForVS2013.msi
2.安装EF6.0
菜单:工具——>库程序包管理器——>程序包管理控制台
在PM>后面输入命令:
Install-Package EntityFramework -Version 6.1.3
Install-Package MySql.Data.Entity -Version 6.8.6
回车执行,这是一个安装的过程,需要连接网络。
安装成功:
3.添加实体映射
前面的操作大家都会,就不截图了。
右击新建项——>ADO.NET实体数据模型——>来自数据库的EF设计器——>新建连接——>更数据源,变成Mysql的。接着填写数据库信息,我这个连接总是出问题,登陆失败,是因为我的mysql安装的时候端口号是3307,所以我需要特别设置一下port=3307。——>选择数据库对象和设置——>完成。
【解决问题】
搭建框架的过程中遇到一些问题,常见的问题就是我spring配置文件写错,Initialization of object failed : Cannot instantiate Type 导致找不到那个类,人家不给我new。这个问题好解决。头疼的就是,有的时候是忘记添加一些引用(对于框架不熟悉,所以我总是忘记了添加引用),导致它找不到什么依赖项,幸亏了VS强大的撤销,让我这暴脾气没重新开始,一点点的解决问题。还有就是下面这两个问题了,好不容易调到了逻辑层还有什么指定的架构无效的神马错误,这是困扰了我一个晚上啊。
[问题1]
问题1:
无法为具有固定名称“System.Data.SqlClient”的 ADO.NET 提供程序加载在应用程序配置文件中注册的实体框架提供程序类型 “System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer”。请确保使用限定程序集的名称且该程序集对运行的应用程序可用。
原因:
EF的安装版本不是5.0,在nuget程序包管理器控制台安装EF5.0。
Install-Package EntityFramework -Version 6.1.3
Install-Package MySql.Data.Entity -Version 6.8.6
[问题2]
问题2:
解决:在providers 节点里 添加一个mysql.data.MysqlClint节点, 前提是你已经安装了EF框架。
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6"></provider>
【我的收获】
1.事实上EF框架的使用让我们脱离的sql,但是在一下复杂的查询语句中,还是建议使用sql。
2.遇到问题,一步步的调错,我的动力就是错误不一样了!这就是进步,最起码上一个错误解决了~~