zoukankan      html  css  js  c++  java
  • O/RM框架,EF6全面解析

    目录

    1. 基础:O/RM对象关系映射
    2. 基础:EF的三种映射方式
    3. 基础:EF实现数据的CRUD
    4. 基础:复杂查询&执行Sql
    5. 进阶:EF状态跟踪,EF查询缓存,EF查询优化性能,按需更新
    6. 进阶:EF上下文生命周期/事务
    7. 进阶:EF延迟加载本质,导航属性
    8. 进阶:复杂查询&执行Sql
    9. 进阶:EF状态跟踪,实现数据库操作
    10. 进阶:EF上下文生命周期/事务
    11. 进阶:EF延迟,导航属性
    12. EF框架进阶:Context生命周期解析
    13. EF框架进阶:事务-多种事务
    14. EF框架进阶:延迟查询
    15. EF框架进阶:导航属性
    16. EF框架进阶:级联操作
    17. EF框架搭建:项目分层架构
    18. EF框架搭建:EF整合分层架构
    19. EF框架搭建:EF整合IOC unityAOP封装扩展
    20. 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 是从内存中在需要查询的时候循环迭代返回结果的

  • 相关阅读:
    mysql中文乱码
    阻止保存要求重新创建表的更改
    PowerDesigner连接数据库(Oracle)
    PowerDesigner连接数据库(SqlServer)
    Environment Variable: "PATH" 失败
    pl/sql查看锁表及解锁
    Oracle将误闪的数据认回到指定的时间段
    内存监测2
    Windows常用的一些DOC命令
    何为序列化
  • 原文地址:https://www.cnblogs.com/LZXX/p/13372567.html
Copyright © 2011-2022 走看看