zoukankan      html  css  js  c++  java
  • 2.1语法基础_表达式目录树(EF底层原理的实现)

    目绿

      1.表达式目录树是什么?

      2.表达式目录树的作用?

      3.数据库最终需要的是sql语句,为什么使用EF框架写一些lamda就可以获取到数据

    1.表达式目录树本质是什么?

      1.表达式目绿树本质就是一种数据结构(二叉树),如m*n+2+x 会从右往左拆分成 >(M*n+2)+x>(M*n)+2>M*n

      2.拉姆达表达式是作为委托的一个参数,本质就是一个匿名方法,它只不过是可以快捷的声明表达式目绿树

    2.表达式目录树的作用:

    1.SQL查询语句拼接, (之前写sql查询条件都是根据一个个条件进行判断拼接,) 使用表达式目录树可以动态拼接

      为什么要用表达式目录树去拼接sql语句?

      1.以前老的写法是 多个条件进来 通过if一个个判断来进行组装sql语句 

         2.使用表达式目录数之后就可以写一个公共方法 提高代码重用性

       

    2.使用表达式目录树动态转换类,和硬编码性能几乎没啥差距 类与类之间的转换,使用表达式目录树把A类变成一个新的B类(结构要相同)

          一般实现方法:1.硬编码(写死),2.json序列化,3.表达式目录树

        实现方法使用反射获取到A类的属性和字段, 用表达式目录树拼接好一个新的B类,然后使用委托执行B类,最后使用泛型缓存 存储每个执行的委托(泛型缓存:为每个不同类型生成副本,所以不同类型只需要执行一次委托,后面就直接从缓存里面取) ,这样性能高,扩展性好,又解决了反射的性能问题,

    3.数据库最终需要的是sql语句,为什么使用EF框架写一些lamda就可以获取到数据(EF底层原理的实现?)

      EF框架之所以能够写lamda就能访问数据库实际底层原理就是:通过表达式目录树 来一步步解析拉姆达 拼接组装成数据库能访问的sql语句(解析的过程就是访问者模式)

       

      

  • 相关阅读:
    Generate profile vspx
    (转)Connect string 中的 Intergrated Security
    删除数据库
    SQL Server问题之The remote procedure call failed. [0x800706be]
    SQL Server 2008 R2如何开启数据库的远程连接
    ubuntu 12.04 sourcelist 更新源
    Ubuntu12.04 命令gedit出错:Could not connect to session bus (
    解决 Ubuntu 12.04 无法调节屏幕亮度的问题
    Eclipse和PyDev搭建完美Python开发环境(Windows篇)
    raw_input() 与 input() __ Python
  • 原文地址:https://www.cnblogs.com/LZXX/p/13529233.html
Copyright © 2011-2022 走看看