概念
ADO.NET Entity Framework
是微软以ADO.NET为基础所发展出来的对象关系对应(O/R Mapping)解决方案;是ADO.NET中的一组支持开发面向数据的软件应用程序技术,是微软的一个ORM框架
ORM
广义上:ORM指的是面向对象的对象模型(实体)和关系型数据库的数据结构(数据库表)之间的相互转换
侠义上:ORM可被认为是,基于关系型数据库的数据存储,实现一个虚拟的面向对象的数据访问接口。理想情况下,基于这样一个面向对象的接口,持久化一个OO对象应用不需要里哦阿姐任何关系型数据库存储数据的实现细节
创建过程
一:创建步骤
前提:使用NuGet下载 EntityFramework和EntityFramework.zh-Hans和MySql.Data.Entity这三个插件
遇到的问题
1. 主键为空mysql> use student
Database changed
mysql> set global optimizer_switch='derived_merge=OFF';
Query OK, 0 rows affected (0.00 sec)
关闭vs,重启重新操作创建步骤即可
原因:mysql 5.1中开始引入optimizer_switch, 控制mysql优化器行为。他有一些结果集,通过on和off控制开启和关闭优化器行为,对参数的说明可参考官方文档
2. 插件版本过高
解决办法:使用NuGet对 EntityFramework和EntityFramework.zh-Hans进行卸载高版本,下载低版本
edmx文件详解
新建之后.edmx是以实体设计器方式打开的,但是我们可以找到.edmx文件,也可用文本编辑器打开,文件内容如下:
从代码看来,.edmx就是个xml文件,该文件就是用来解析存储模型、概念模型以及两者之间的映射
EF的优点
- 不再需要关心应用程序是如何连接数据库的
- 简介的linq语句大大提高了开发人员的效率,不用再写复杂的sql语句了
- .不再管应用程序如何去连接数据库,直接对类实体对象操作;
EF的缺点
- 由于linq语句编译之后就是sql,对于这种自动生成的sql语句无法控制
- EF的运行机制会消耗大量内存,大大降低了程序运行效率,从而导致降低了用户在客户端的体验效果
- 一旦数据结构发生变化,需要更新EF数据model;有时还可能会出现找不到更新过的实体类这种情况
EF的实质
在EF的实体数据模型由以下三种模型和具体相应的文件扩展名的映射文件进行定义的
- 定义存储模型:存储架构定义语言文件.ssdl
- 定义概念模型:概念架构定义语言文件.csdl
- 定义存储过程与概念模型之间的映射:映射规范语言文件.msl
实体框架 使用这些基于XML的模型和映射文件将对概念模型中的实体和关系的创建,读取,更新和删除操作转换为对数据源中的等效操作
【Linq与sql区别】
- LINQ,语言集成查询(Language INtegrated Query)是一组用于c#和Visual Basic语言的扩展。它允许编写C#或者Visual Basic
- linq是面向对象的sql。也就是说,sql是向关系型数据库的查询,而linq实际上是对内存里的数据的查询,最终会通过表达式分析与实体到关系的映射(linq to sql),把linq转换为sql语句
- linq to sql是一种ORM组件,O/RM 允许你使用 .NET 的类来对关系数据库进行建模。即是一个数据库到对象结构的一个中间层, 他把对关系数据的管理转变为对象的操作,屏蔽了麻烦的sql;对数据的增删改查提供了简单的实现方式