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


接近20天的工作量,有45处变化。修复了已知的BUG、并新增了一些功能,详细如下:
- 重构:SQL日志记录功能
- 重构:ExpressionVisitor解析器,重命名为AbsSqlVisitor(SQL解析专用基类),继承自AbsExpressionVisitor(通用解析类)
- 重构:SelectVisitor字段筛选解析器,改为只为字段筛选服务(旧的与排序共用)
- 重构:Select表达式树,由原来的List<Expression> 合并为一个Expression(合并了)
- 重构:Insert、Update的实体赋值传递到SQL生成类 改为转成表达式树传递
- 重构:重构AddAssign的实现,由原来的Dictionary<Expression, bool> Assign 改为 Expression(合并了)
- 重构:将SQL、DbParam、Name从Queue移到ISqlBuilder中,由SqlBuilder继承并为每个方法返回
- 重构:部份属性、方法、类的命名优化
- 重构:队列管理由TableQueueManger、ProcQueueManger、ViewQueueManger合并为:QueueManger
- 重构:数据库上下文由TableContext、ProcContext、ViewContext合并为:DbContext
- 重构:减少Queue代码(表达式树合并代码,统一放到ExpressionBuilder类中管理
- 重构:减少Queue在全局的依赖,改为新增接口依赖
- 重构:非每次查询新实例的对象移到DbContext中
- 重构:取消AbsSqlVisitor对Queue的依赖
- 重构:取消SqlBuilder对Queue的依赖(用户需要实现自己SQL下更方便)
- 优化:SQL日志记录工具
- 优化:TableSetCache缓存中Update、AddUp的处理,由反射改为委托执行
- 优化:表达式树的SetValue方法 + 缓存(代替旧PropertyInfo.SetValue反射)
- 优化:表达式树的GetValue方法 + 缓存(代替旧PropertyInfo.GetValue反射)
- 优化:表达式树的CreateInstance方法 + 缓存(代替旧Activator.CreateInstance(type)反射)
- 优化:DataTable转ToList操作
- 优化:AssignVisitor解析器,让它支持所有赋值操作
- 新增:TableSetCache方法,动态返回TableSetCache类型
- 新增:IEnumerable<>.ToList 的 总数量扩展方法
- 新增:IDbSet接口,所有Set类继承此接口,以添加扩展支持
- 新增:运行异常日志功能及相应的分析器工具(简单代替log4net,仅未捕获异常记录)
- 新增:反序列化时,如果失败,则添加移动错误格式的文件选项参数
- 新增:AbsExpressionVisitor通用的表达式树解析器(可自由扩展加入所需的功能)
- 新增:OrderByVisitor字段排序解析器
- 新增:AssignVisitor赋值解析器,解析Update、AddUp的实体赋值情况
- 新增:InsertVisitor赋值解析器,解析Insert的实体赋值情况
- 新增:SortDelete逻辑删除功能,支持(bool、int、DateTime标记类型),TableSet调用Delete时,转为逻辑删除(Update),查询时过滤标记数据。
- 新增:IContextProvider接口、ISqlParam接口。ExpressionBuilder表达式树创建者(条件、排序、筛选、赋值)
- 修改:变更分类扩展方法的参数类型
- 修改:web.config配置文件重命名为:WebGeneral.config(与.net web的web.config编译时冲突)
- 修改:变更SqlExceptionLog配置文件名称
- 修改:异常的邮件通知配置变名(变成通用的邮件通知,包括SQL异常、运行异常及未来增加的需要提醒的邮件)
- 修改:SelectVisitor中Visit方法的返回值(无值时返回*)
- 修改:FieldMap重命名为SetState
- 修改:去除DbWriteSet类
- 修复:邮件发送的BUG
- 修复:TableSet,Update时,如果主键设置了值之后,要过滤该值的赋值
- 修复:TableSetCache,Update时没有对缓存限制条件,导致全部缓存被修改
- 修复:修复类型枚举转换失败的BUG
- 修复:字段映射BUG
Farseer.net轻量级ORM开源框架 V1.2版本升级消息的更多相关文章
- Farseer.net轻量级ORM开源框架 V1.5版本升级消息
SHA-1: 0ede88104f269f108b68be1e87ffcead4a354ec6 * 提交V1.5版本1.新增:整表缓存的实现方式(提取接口,可由客户端算定义实现)2.新增:SQL配置化 ...
- Farseer.net轻量级ORM开源框架 V1.8版本升级消息
SHA-1: 775a93cf64df3f49c83cc4f4df346afd2075a68f * 发布V1.8.0修复:Oracle的SQL生成 在没有条件时,缺少Where关键字,导致无法分页修复 ...
- Farseer.net轻量级ORM开源框架 V1.3版本升级消息
SHA-1: abca3b99801648fa23c7f4934de6c128f042cf47 * 提交新版本:V1.31.重构:FS.Mapping命名空间移到 FS.Core.Map中2.重构:对 ...
- Farseer.net轻量级ORM开源框架 V1.x 教程目录
本篇教程将以Ver 1.x版本进行详细使用讲解 大家有任何疑问可以加入我们的官方QQ群进行讨论.QQ群:116228666 (Farseer.net开源框架交流) 请注明:Farseer.Net 整个 ...
- Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图的数据操作
导航 目 录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图实体类映射 下一篇:Farseer.net轻量级ORM开源 ...
- Farseer.net轻量级ORM开源框架 V1.x 入门篇:存储过程数据操作
导航 目 录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:存储过程实体类映射 下一篇:Farseer.net轻量级ORM ...
- Farseer.net轻量级ORM开源框架 V1.x 入门篇:存储过程实体类映射
导航 目 录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图的数据操作 下一篇:Farseer.net轻量级ORM开源 ...
- Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图实体类映射
导航 目 录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:表的数据操作 下一篇:Farseer.net轻量级ORM开源框 ...
- Farseer.net轻量级ORM开源框架 V1.x 入门篇:数据库上下文
导航 目 录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:数据库配置文件 下一篇:Farseer.net轻量级ORM开源 ...
随机推荐
- LIKIE INSTR
SELECT url FROM test_url WHERE FROM_UNIXTIME(create_time,'%Y%m%d %H') < '20171218 00' AND no ...
- 运行tomcat6w.exe ,提示 指定的服务未安装 unable to open the service 'tomcat6'
错误:运行tomcat6w.exe ,提示 指定的服务未安装 unable to open the service 'tomcat6'(我用的是官网下载的解压版) 解决方法: 打开命令行提示符窗口=& ...
- mysql数据库ip与字符串
Mysql自带的IP转换语句 inet_aton:将ip地址转换成数字型 inet_ntoa:将数字型转换成ip地址 //使用inet_aton函数,将字符串IP转换为整型: mysql> se ...
- Android沉浸式状态栏(透明状态栏)最佳实现
Android沉浸式状态栏(透明状态栏)最佳实现 在Android4.4之前,我们的应用没法改变手机的状态栏颜色,当我们打开应用时,会出现上图中左侧的画面,在屏幕的顶部有一条黑色的状态栏,和应用的风格 ...
- SERVLET类常用接口及方法
SERVLET类常用接口及方法 2011-09-09 16:14:43 [size=xx-small]SERVLET类常用接口及方法2007年04月05日 星期四 04:46 P.M.基本类和接 ...
- 关于Vim的一个配置文件
昨天晚上+今天早上怒赶了一份关于Vim的自动化配置的Shell脚本,之前在github上见过一个这么一个类似的脚本项目,然后又见到同校的有一位师兄也写过这么一个类似的脚本文件,然后我也抽分跟着写一份属 ...
- 【POJ 3140】 Contestants Division
[题目链接] 点击打开链接 [算法] 树形DP ans = min{ | total - 2 * sum[k] | } (sum为以k为根的子树的权值和) [代码] #include <algo ...
- 【转】Vuex 学习总结
对于很多新手来说,只是阅读文档是不好消化,我的建议是看看 vuex 的实例,通过研究实例来学习vuex.这样就会好理解多了.如果还是不能理解,最好办法就是先把store 的四个属性:state, ge ...
- rsync+inotify 实现实时同步
inotify:这个可以监控文件系统中的添加,修改,删除,移动等事件 inotify的特性需要linux内核2.6.13以上的支持 [root@test1 inotify-tools-3.13]# u ...
- c语言和c++栈的简单实现以及构造器的原理
也就是训练将原来的c语言 用类表示出来.. 关于构造器: //1与类名相同 没有返回值 被系统生成对象时自动调用,用于初始化 //2 可以有参数 构造器重载 默认参数 //3 重载和默认不能同时存在, ...