V1.1到V1.2的更新,重构了很多类及方法,其中主要做了性能优化(取消所有反射,使用表达式树+缓存)、解耦了SQL生成层(没有实体、队列的依赖,所有数据均通过表达式树传递解析)

先上内部更新历史记录:

接近20天的工作量,有45处变化。修复了已知的BUG、并新增了一些功能,详细如下:

15处重构
  1. 重构:SQL日志记录功能
  2. 重构:ExpressionVisitor解析器,重命名为AbsSqlVisitor(SQL解析专用基类),继承自AbsExpressionVisitor(通用解析类)
  3. 重构:SelectVisitor字段筛选解析器,改为只为字段筛选服务(旧的与排序共用)
  4. 重构:Select表达式树,由原来的List<Expression> 合并为一个Expression(合并了)
  5. 重构:Insert、Update的实体赋值传递到SQL生成类 改为转成表达式树传递
  6. 重构:重构AddAssign的实现,由原来的Dictionary<Expression, bool> Assign 改为 Expression(合并了)
  7. 重构:将SQL、DbParam、Name从Queue移到ISqlBuilder中,由SqlBuilder继承并为每个方法返回
  8. 重构:部份属性、方法、类的命名优化
  9. 重构:队列管理由TableQueueManger、ProcQueueManger、ViewQueueManger合并为:QueueManger
  10. 重构:数据库上下文由TableContext、ProcContext、ViewContext合并为:DbContext
  11. 重构:减少Queue代码(表达式树合并代码,统一放到ExpressionBuilder类中管理
  12. 重构:减少Queue在全局的依赖,改为新增接口依赖
  13. 重构:非每次查询新实例的对象移到DbContext
  14. 重构:取消AbsSqlVisitor对Queue的依赖
  15. 重构:取消SqlBuilder对Queue的依赖(用户需要实现自己SQL下更方便)
7处优化
  1. 优化:SQL日志记录工具
  2. 优化:TableSetCache缓存中UpdateAddUp的处理,由反射改为委托执行
  3. 优化:表达式树的SetValue方法 + 缓存(代替旧PropertyInfo.SetValue反射)
  4. 优化:表达式树的GetValue方法 + 缓存(代替旧PropertyInfo.GetValue反射)
  5. 优化:表达式树的CreateInstance方法 + 缓存(代替旧Activator.CreateInstance(type)反射)
  6. 优化:DataTable转ToList操作
  7. 优化:AssignVisitor解析器,让它支持所有赋值操作
11处新增
  1. 新增:TableSetCache方法,动态返回TableSetCache类型
  2. 新增:IEnumerable<>.ToList 的 总数量扩展方法
  3. 新增:IDbSet接口,所有Set类继承此接口,以添加扩展支持
  4. 新增:运行异常日志功能及相应的分析器工具(简单代替log4net,仅未捕获异常记录)
  5. 新增:反序列化时,如果失败,则添加移动错误格式的文件选项参数
  6. 新增:AbsExpressionVisitor通用的表达式树解析器(可自由扩展加入所需的功能)
  7. 新增:OrderByVisitor字段排序解析器
  8. 新增:AssignVisitor赋值解析器,解析Update、AddUp的实体赋值情况
  9. 新增:InsertVisitor赋值解析器,解析Insert的实体赋值情况
  10. 新增:SortDelete逻辑删除功能,支持(bool、int、DateTime标记类型),TableSet调用Delete时,转为逻辑删除(Update),查询时过滤标记数据。
  11. 新增:IContextProvider接口、ISqlParam接口。ExpressionBuilder表达式树创建者(条件、排序、筛选、赋值)
7处修改
  1. 修改:变更分类扩展方法的参数类型
  2. 修改:web.config配置文件重命名为:WebGeneral.config(与.net web的web.config编译时冲突)
  3. 修改:变更SqlExceptionLog配置文件名称
  4. 修改:异常的邮件通知配置变名(变成通用的邮件通知,包括SQL异常、运行异常及未来增加的需要提醒的邮件)
  5. 修改:SelectVisitor中Visit方法的返回值(无值时返回*)
  6. 修改:FieldMap重命名为SetState
  7. 修改:去除DbWriteSet
5处修复
  1. 修复:邮件发送的BUG
  2. 修复:TableSet,Update时,如果主键设置了值之后,要过滤该值的赋值
  3. 修复:TableSetCache,Update时没有对缓存限制条件,导致全部缓存被修改
  4. 修复:修复类型枚举转换失败的BUG
  5. 修复:字段映射BUG

Farseer.net轻量级ORM开源框架 V1.2版本升级消息的更多相关文章

  1. Farseer.net轻量级ORM开源框架 V1.5版本升级消息

    SHA-1: 0ede88104f269f108b68be1e87ffcead4a354ec6 * 提交V1.5版本1.新增:整表缓存的实现方式(提取接口,可由客户端算定义实现)2.新增:SQL配置化 ...

  2. Farseer.net轻量级ORM开源框架 V1.8版本升级消息

    SHA-1: 775a93cf64df3f49c83cc4f4df346afd2075a68f * 发布V1.8.0修复:Oracle的SQL生成 在没有条件时,缺少Where关键字,导致无法分页修复 ...

  3. Farseer.net轻量级ORM开源框架 V1.3版本升级消息

    SHA-1: abca3b99801648fa23c7f4934de6c128f042cf47 * 提交新版本:V1.31.重构:FS.Mapping命名空间移到 FS.Core.Map中2.重构:对 ...

  4. Farseer.net轻量级ORM开源框架 V1.x 教程目录

    本篇教程将以Ver 1.x版本进行详细使用讲解 大家有任何疑问可以加入我们的官方QQ群进行讨论.QQ群:116228666 (Farseer.net开源框架交流) 请注明:Farseer.Net 整个 ...

  5. Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图的数据操作

    导航 目   录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图实体类映射 下一篇:Farseer.net轻量级ORM开源 ...

  6. Farseer.net轻量级ORM开源框架 V1.x 入门篇:存储过程数据操作

    导航 目   录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:存储过程实体类映射 下一篇:Farseer.net轻量级ORM ...

  7. Farseer.net轻量级ORM开源框架 V1.x 入门篇:存储过程实体类映射

    导航 目   录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图的数据操作 下一篇:Farseer.net轻量级ORM开源 ...

  8. Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图实体类映射

    导航 目   录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:表的数据操作 下一篇:Farseer.net轻量级ORM开源框 ...

  9. Farseer.net轻量级ORM开源框架 V1.x 入门篇:数据库上下文

    导航 目   录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:数据库配置文件 下一篇:Farseer.net轻量级ORM开源 ...

随机推荐

  1. 授权QQ登录的qq端前端页面变迁

    ac_type = 'qq' if ac_type == 'qq': myid, mypwd = qq_key xp = '/html/body/div/div/div[2]/div/div/div/ ...

  2. solr 命令

    本文为转载内容:源地址:http://blog.csdn.net/matthewei6/article/details/50620600 查看帮助 bin/solr -help            ...

  3. IOS UI 设计 技术

    AutoLayout AutoLayout是一种基于约束的,描述性的布局系统. 程序员—-(cgrect)—>frame(center+bounds)    =====>   程序员—(N ...

  4. bzoj 4603 平凡的骰子

    题目大意: 思路: 首先我们需要求出整个凸多面体的重心 可以通过把多面体剖分为四面体 求出每个四面体的重心 四面体的重心为四个点的坐标和/4 对每个四面体的重心 加上它们体积的权 加权平均数即为整个的 ...

  5. Codeforces round 419 div2 补题 CF 816 A-E

    A Karen and Morning 水题 注意进位即可 #include<bits/stdc++.h> using namespace std; typedef long long i ...

  6. HDU1429:胜利大逃亡(续)

    传送门 题意 给出一个迷宫,门需要钥匙来打开,t秒内能否从起点到达终点 分析 这题我用以前一道题的代码改了改就过了,具体思想:设置vis[status][x][y],status记录到达该点拥有的钥匙 ...

  7. 洛谷 P2754 星际转移问题【最大流】

    判无解的方法非常粗暴:快T了还是没有合法方案,就是无解. 然后枚举答案,对于每一天都建一套太空站,s连地球,t连月球,上一天的太空站连向这一天的太空站,流量均为inf.然后对于每个飞船,上一天的停靠站 ...

  8. spoj 371 Boxes【最小费用最大流】

    对于ai==0连接(i,t,1,0),对于ai>1(s,i,ai-1,0),然后对以相邻的两个点(i,j)连接(i,j,inf,1),注意这里是一个环的形式,所以1和n+1相连 #include ...

  9. 极简版OKEX比特币跨期对冲策略

    策略特点 只做正套,反套可以修改下,合约调换一下,即是反套. 添加两个 交易所对象,第一个季度,第二个当周. 精简了所有能简化的代码,优化空间还很大,教学策略谨慎实盘,跨期有一定风险. 欢迎反馈BUG ...

  10. springboot(十一)SpringBoot任务

    github地址: https://github.com/showkawa/springBoot_2017/tree/master/spb-demo/spb-brian-query-service 1 ...