Entity Framework

实体框架 开源 微软的 EF

开源:

1)开放源代码

2)有完整的项目社区(论坛) 方便开发者贡献自己的代码 使用社区(社会)的力量促进项目的发展

要有方便的在线交流系统 要有丰富的文档 好的代码注释

开源不仅仅是把源代码放到网上去

有机会的话,要尽可能参与到开源项目中去, 参与开源项目对程序员有重要的意义 一定要拥抱开源

开源一般是免费的,一般有对应的开源协议

     

EF以ado.net为基础,是ORM(object relation mapping)解决方案

Object 实体模型、对象

Relation 关系型数据库中的数据结构

EF是ADO.NET中的一组支持开发面向数据的软件应用程序的技术

EF是微软的一个ORM框架

EF让开发进入到一个新的阶段

     

一种技术,用一句话概括

比如, web form, ado.net,

Ado.net 是一组用于操作数据库的类库(API),

什么是asp.net? asp.net是.net平台下开发web应用程序的框架

对内容、知识、技术 , 要有能高度概括的能力

多总结 从更高的层次概括、看待

什么是linq ? language intergrated query, linq是微软开发的.net平台下访问数据库的技术

Ef 与 asp.net mvc 、 ado.net 的关系

     

什么是ORM?

ORM是一种思想, 是表实体和表之间的相互转化

广义上,ORM指的是面向对象的对象模型和关系型数据库的数据结构之间的相互转换

数据库中的数据结构 ---------- 实体模型

狭义上,ORM可以被认为是,基于关系型数据库的数据存储,实现一个虚拟的面向对象的数据访问接口。理想情况下,基于这样一个面向对象的接口,持久化一个OO对象应该不需要了解任何关系型数据库存储数据的实现细节

EF是一种实现了这种转换(思想)的框架

Nhibernate是java平台下的ORM框架

数据库驱动:ADO.NET、ADO、OLEDB、ODBC http://www.2cto.com/database/201508/429952.html

   

EF基本操作

   

   

EF操作数据库:ado.net

EF: 必须通过 >ado.net > sql> database

Ef 帮助我们把实体的变化翻译成sql脚本,然后调用底层的ado.net保存到数据库中去。

Ef操作数据库基本原理

   

用xml文本编辑器 查看 model.edmx

   

Database first : 数据库先行。先有数据库,根据数据库生成模型。

Model first: 先设计模型,然后再生成数据库

   

Power Designer

新建表及表关联

拖动后自动建立外键

Nvarchar(32) 长度为2的幂

   

在vs中,添加.net实体数据模型,有类似的操作、产生类似的结果(表结构),如下图:

通过这两种方式实现数据库与实体模型的同步

Linq 表达式返回值都是 IQueryable<T>

IQueryable<UserInfo> data = from u in dbContext.UserInfo where u.ID < 10 select u;

上述代码只是初始化了IQueryable里面的三个属性,并没有真正地查询出数据

用到IQueryable接口集合的时候,用IQueryable接口里面的Provider解析Expression然后真正地查询数据。

延迟加载。延迟加载会导致多次查询

例如 foreach(var userInfo in data){}

每次用时都会查询数据。如下:

foreach(var userInfo in data){}

foreach(var userInfo in data){}

会查询两次数据。

   

Vs 插件 resharper

Sql Server Profiler , sql 脚本监控,性能分析,可用来查看linq生成的脚本

   

Contains 翻译成 sql 里面的 %...%

   

List 集合 的数据存放在内存中,

IQueryable 集合数据是离线的,不存储在内存中,需要时从数据源读取

导航属性,也是需要时查询,如下:

每次查询一个用户的订单信息,导致 foreach 会多次查询用户的订单信息

Sql语句查询过程截图:

   

DBContext 数据库上下文实例,多个实例可能会引起数据混乱(冲突)

实现代码:

原文地址:https://www.cnblogs.com/rockywood/p/6498847.html