Farseer.net轻量级ORM开源框架 V1.2版本升级消息
2015-07-03 19:14
483 查看
V1.1到V1.2的更新,重构了很多类及方法,其中主要做了性能优化(取消所有反射,使用表达式树+缓存)、解耦了SQL生成层(没有实体、队列的依赖,所有数据均通过表达式树传递解析)
先上内部更新历史记录:
接近20天的工作量,有45处变化。修复了已知的BUG、并新增了一些功能,详细如下:
15处重构
重构: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下更方便)
7处优化
优化:SQL日志记录工具
优化:TableSetCache缓存中Update、AddUp的处理,由反射改为委托执行
优化:表达式树的SetValue方法 + 缓存(代替旧PropertyInfo.SetValue反射)
优化:表达式树的GetValue方法 + 缓存(代替旧PropertyInfo.GetValue反射)
优化:表达式树的CreateInstance方法 + 缓存(代替旧Activator.CreateInstance(type)反射)
优化:DataTable转ToList操作
优化:AssignVisitor解析器,让它支持所有赋值操作
11处新增
新增:TableSetCache方法,动态返回TableSetCache类型
新增:IEnumerable<>.ToList 的 总数量扩展方法
新增:IDbSet接口,所有Set类继承此接口,以添加扩展支持
新增:运行异常日志功能及相应的分析器工具(简单代替log4net,仅未捕获异常记录)
新增:反序列化时,如果失败,则添加移动错误格式的文件选项参数
新增:AbsExpressionVisitor通用的表达式树解析器(可自由扩展加入所需的功能)
新增:OrderByVisitor字段排序解析器
新增:AssignVisitor赋值解析器,解析Update、AddUp的实体赋值情况
新增:InsertVisitor赋值解析器,解析Insert的实体赋值情况
新增:SortDelete逻辑删除功能,支持(bool、int、DateTime标记类型),TableSet调用Delete时,转为逻辑删除(Update),查询时过滤标记数据。
新增:IContextProvider接口、ISqlParam接口。ExpressionBuilder表达式树创建者(条件、排序、筛选、赋值)
7处修改
修改:变更分类扩展方法的参数类型
修改:web.config配置文件重命名为:WebGeneral.config(与.net web的web.config编译时冲突)
修改:变更SqlExceptionLog配置文件名称
修改:异常的邮件通知配置变名(变成通用的邮件通知,包括SQL异常、运行异常及未来增加的需要提醒的邮件)
修改:SelectVisitor中Visit方法的返回值(无值时返回*)
修改:FieldMap重命名为SetState
修改:去除DbWriteSet类
5处修复
修复:邮件发送的BUG
修复:TableSet,Update时,如果主键设置了值之后,要过滤该值的赋值
修复:TableSetCache,Update时没有对缓存限制条件,导致全部缓存被修改
修复:修复类型枚举转换失败的BUG
修复:字段映射BUG
先上内部更新历史记录:
接近20天的工作量,有45处变化。修复了已知的BUG、并新增了一些功能,详细如下:
15处重构
重构: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下更方便)
7处优化
优化:SQL日志记录工具
优化:TableSetCache缓存中Update、AddUp的处理,由反射改为委托执行
优化:表达式树的SetValue方法 + 缓存(代替旧PropertyInfo.SetValue反射)
优化:表达式树的GetValue方法 + 缓存(代替旧PropertyInfo.GetValue反射)
优化:表达式树的CreateInstance方法 + 缓存(代替旧Activator.CreateInstance(type)反射)
优化:DataTable转ToList操作
优化:AssignVisitor解析器,让它支持所有赋值操作
11处新增
新增:TableSetCache方法,动态返回TableSetCache类型
新增:IEnumerable<>.ToList 的 总数量扩展方法
新增:IDbSet接口,所有Set类继承此接口,以添加扩展支持
新增:运行异常日志功能及相应的分析器工具(简单代替log4net,仅未捕获异常记录)
新增:反序列化时,如果失败,则添加移动错误格式的文件选项参数
新增:AbsExpressionVisitor通用的表达式树解析器(可自由扩展加入所需的功能)
新增:OrderByVisitor字段排序解析器
新增:AssignVisitor赋值解析器,解析Update、AddUp的实体赋值情况
新增:InsertVisitor赋值解析器,解析Insert的实体赋值情况
新增:SortDelete逻辑删除功能,支持(bool、int、DateTime标记类型),TableSet调用Delete时,转为逻辑删除(Update),查询时过滤标记数据。
新增:IContextProvider接口、ISqlParam接口。ExpressionBuilder表达式树创建者(条件、排序、筛选、赋值)
7处修改
修改:变更分类扩展方法的参数类型
修改:web.config配置文件重命名为:WebGeneral.config(与.net web的web.config编译时冲突)
修改:变更SqlExceptionLog配置文件名称
修改:异常的邮件通知配置变名(变成通用的邮件通知,包括SQL异常、运行异常及未来增加的需要提醒的邮件)
修改:SelectVisitor中Visit方法的返回值(无值时返回*)
修改:FieldMap重命名为SetState
修改:去除DbWriteSet类
5处修复
修复:邮件发送的BUG
修复:TableSet,Update时,如果主键设置了值之后,要过滤该值的赋值
修复:TableSetCache,Update时没有对缓存限制条件,导致全部缓存被修改
修复:修复类型枚举转换失败的BUG
修复:字段映射BUG
相关文章推荐
- android长按home键流程 .
- Libgdx Box2D现实---这缓释微丸(两:Box2D介绍)
- NYOJ 44 子串和
- J2EE学习参考链接收藏
- 两个有序数组中找中位数或者第K大的元素
- 集成支付宝的错误
- 自定义带进度条的WebView , 增加获取web标题和url 回掉
- inner join和outer join
- 服务器阵列的IOPS测试
- 8.17
- mtd-utils命令简介
- 使用git curl服务测试-----Restful服务
- Android异步加载图片与文字(一)
- C#页面添加提交数据后跳出小弹窗的功能
- CentOS 6.5 安装 MySQL5.6 并用Navicat for MySQL 连接
- [.net 面向对象程序设计进阶] (5) Lamda表达式(一) 创建委托
- 7.12
- write a tf listener
- Linux杀死进程的方法
- NYOJ 860 又见01背包