FreeSql 已支持 .NetFramework 4.0、ODBC 访问
FreeSql 开源发布快一年了,目前主仓库代码量 64118 行,用 git 命令统计的命令如下:
find . "(" -name "*.cs" ")" -print | xargs wc -l
加上其他几个扩展包的代码,大约有 70000 行源码。
仓库地址:https://github.com/2881099/FreeSql
在金九银十的日子,发布了两大重要支持更新,分别是 .NetFramework4.0 和 ODBC。
随着不断的迭代更新,越来越稳定,也越来越强大。预计在一周年的时候(2020年1月1日)发布 1.0 正式版本。
由于篇幅原因,太短则上不了首页,同时也对不起观众,下面介绍一下最近更新的几个较实用的功能:
1|0ISelect.ToDelete/ToUpdate
IFreeSql 之 CRUD 方法,分别对应 IInsert、ISelect、IUpdate、IDelete。
IDelete 默认不支持导航对象,多表关联等。ISelect.ToDelete 可将查询对象转为删除对象,以便支持导航对象或其他查询功能删除数据,如下:
注意:此方法不是将数据查询到内存循环删除,上面的代码产生如下 SQL 执行:
复杂删除使用该方案的好处:
- 删除前可预览测试数据,防止错误删除操作,实现所查、即所删;
- 支持更加复杂的删除操作(IDelete 默认只支持简单的操作),甚至在 ISelect 上使用 Limit(10) 将只删除附合条件的前 10条记录;
ToUpdate 功能大概相同。
2|0GlobalFilter 全局过滤
FreeSql 基础层实现了 Select/Update/Delete 可设置的全局过滤器功能。
Apply 泛型参数可以设置为任何类型,当使用 Select/Update/Delete 方法时会进行过滤器匹配尝试(try catch):
- 匹配成功的,将附加 where 条件;
- 匹配失败的,标记下次不再匹配,避免性能损耗;
如何禁用?
fsql.Update/Delete 方法效果同上。
3|0仓储过滤器(旧功能)
这是一个原先就支持了的功能。FreeSql.Repository 也同样实现了过滤器功能,它不仅是查询时过滤,连删除/修改/插入时都会进行验证,避免数据安全问题。
注意:仓储的过滤器与 IFreeSql.GlobalFilter 不是一个功能,可以同时生效
每个仓储实例都有 IDataFilter 属性,可利用其完成过滤器管理,它是独立的修改后不影响全局。
3|1临时禁用
3|2过滤与验证
假设我们有User(用户)、Topic(主题)两个实体,在领域类中定义了两个仓储:
在开发过程中,总是担心 topicRepository 的数据安全问题,即有可能查询或操作到其他用户的主题。因此我们在v0.0.7版本进行了改进,增加了 filter lambda 表达式参数。
- 在查询/修改/删除时附加此条件,从而达到不会修改其他用户的数据;
- 在添加时,使用表达式验证数据的合法性,若不合法则抛出异常;
4|0实体变化通知
该功能依附在 FreeSql.Repository 上实现的,对实体的变化进行统一转发,以便实现全局或局部类似日志的功能。
全局设置:
单独设置 DbContext 或者 UnitOfWork:
参数 report 是一个 List 集合,集合元素的类型定义如下:
变化类型- | 说明 |
---|---|
Insert | 实体对象被插入 |
Update | 实体对象被更新 |
Delete | 实体对象被删除 |
SqlRaw | 执行了SQL语句 |
SqlRaw 目前有两处地方比较特殊:
- 多对多联级更新导航属性的时候,对中间表的全部删除操作;
- 通用仓储类 BaseRepository 有一个 Delete 方法,参数为表达式,而并非实体;
DbContext.SaveChanges,或者 Repository 对实体的 Insert/Update/Delete,或者 UnitOfWork.Commit 操作都会最多触发一次该事件。
5|0更多功能
请移步更新日志:https://github.com/2881099/FreeSql/wiki/更新日志
__EOF__

本文链接:https://www.cnblogs.com/kellynic/p/11768147.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库