FreeSql 开源发布快一年了,目前主仓库代码量 64118 行,用 git 命令统计的命令如下:
find . “(” -name “*.cs” “)” -print | xargs wc -l
加上其他几个扩展包的代码,大约有 70000 行源码。
仓库地址:https://github.com/2881099/FreeSql
在金九银十的日子,发布了两大重要支持更新,分别是 .NetFramework4.0 和 ODBC。
随着不断的迭代更新,越来越稳定,也越来越强大。预计在一周年的时候(2020年1月1日)发布 1.0 正式版本。
由于篇幅原因,太短则上不了首页,同时也对不起观众,下面介绍一下最近更新的几个较实用的功能:
ISelect.ToDelete/ToUpdate
IFreeSql 之 CRUD 方法,分别对应 IInsert、ISelect、IUpdate、IDelete。
IDelete 默认不支持导航对象,多表关联等。ISelect.ToDelete 可将查询对象转为删除对象,以便支持导航对象或其他查询功能删除数据,如下:
fsql.Select<T1>().Where(a => a.Options.xxx == 1).ToDelete().ExecuteAffrows();
注意:此方法不是将数据查询到内存循环删除,上面的代码产生如下 SQL 执行:
DELETE FROM `T1` WHERE id in (select a.id from T1 a left join Options b on b.t1id = a.id where b.xxx = 1)
复杂删除使用该方案的好处:
- 删除前可预览测试数据,防止错误删除操作,实现所查、即所删;
- 支持更加复杂的删除操作(IDelete 默认只支持简单的操作),甚至在 ISelect 上使用 Limit(10) 将只删除附合条件的前 10条记录;
ToUpdate 功能大概相同。
GlobalFilter 全局过滤
FreeSql 基础层实现了 Select/Update/Delete 可设置的全局过滤器功能。
public static AsyncLocal<Guid> TenantId {
get; set; } = new AsyncLocal<Guid>