目录
- 基础:O/RM对象关系映射
- 基础:EF的三种映射方式
- 基础:EF实现数据的CRUD
- 基础:复杂查询&执行Sql
- 进阶:EF状态跟踪,EF查询缓存,EF查询优化性能,按需更新
- 进阶:EF上下文生命周期/事务
- 进阶:EF延迟加载本质,导航属性
- 进阶:复杂查询&执行Sql
- 进阶:EF状态跟踪,实现数据库操作
- 进阶:EF上下文生命周期/事务
- 进阶:EF延迟,导航属性
- EF框架进阶:Context生命周期解析
- EF框架进阶:事务-多种事务
- EF框架进阶:延迟查询
- EF框架进阶:导航属性
- EF框架进阶:级联操作
- EF框架搭建:项目分层架构
- EF框架搭建:EF整合分层架构
- EF框架搭建:EF整合IOC unity、AOP封装扩展
- EF框架搭建:EF封装扩展
5.EF状态跟踪,EF查询缓存,EF查询优化性能,按需更新
1.如果我们想要用EF操作实体,那么是怎么让EF和实体之间联系起来的? 其实是每次需要把实体注入到ef之中
2.为什么会说EF会有性能问题?,实际上我们用EF操作实体的时候 因为有状态跟踪,每次状态的变化其实是-clone副本放到内存里面去 所以可以使用AS-Notracking 不让查出来的结果被上下文跟踪,这样也就不占内存,但也要考虑到这个实体是否后续会被用到
3.EF查询实际上是优先从缓存查找,只有ef.Tolist ef.ToArray 才会把结果加载到内存,后面再用EF去Find查找就直接去缓存查,没有就直接去数据库查-所以也就建议多实用EF.Find查询,以为优先走的是缓存,而且还是走主键查询
6.EF上下文生命周期和事务
Context生命周期
1.EF提交SaceChange会默认启动事务,然后提交给Data操作
2.Context是一个上下文环境,里面内置对象跟踪,会开启一个连接(等同于一个数据库连接),一次请求最好是一个Context
3.多线程情况下的Context最好是每个线程一个Context,用完且需尽快释放内存,如果多线程共用一个Context 那么会造成A插入还不想提交的时候 B进行修改提交 会造成两人都提交到数据库中去
EF事务
1.一般是SaveChange,如果使用了Commit那么会以Commit为准
EF分布式事务下可以使用TencentClassRommContext保证多个数据库的事务提交 TranSactionSope事务
7.EF延迟加载解析,导航属性
EF延迟加载解析
1.EF继承自Iqueryable(结构) 下面有 Expression:表达式目录树,能够生成SQL语句的数据结构 Provider:把表达式目绿树生成SQL语句的程序 ElementType:查询DataBase返回结果
2.所以EF延迟加载先用Expression生成对象SQL数据结构 在使用的时候再去用Provider生成SQL脚本 使用ElementType方法到数据库中查询
3.而且延迟加载必须作用在Context作用域内 因为Context就是一个与DataBase的连接 如果没在里面 没有DataBase连接 那就没有作用了
Linq To Object也可以延迟加载但是确实不一样的
1.它继承自Ienumerator是一个迭代器 下面有 Current MoeNext Reset 是从内存中在需要查询的时候循环迭代返回结果的