[开源] .Net orm FreeSql 1.5.0 最新版本(番号:好久不见)

这篇文章是我有史以来编辑最长时间的,历时 4小时!!!原本我可以利用这 4小时编写一堆胶水代码,真心希望善良的您点个赞,谢谢了!!

很久很久没有写文章了,上一次还是在元旦发布 1.0 版本的时候,今年版本规划是每月底发布小版本(年底发布 2.0),全年的开源工作主要是收集用户需求增加功能,完善测试,修复 bug。FreeSql 1.0 -> 1.5 相隔半年有哪些新功能?只能说每个功能都能让我兴奋,并且能感受到使用者也一样兴奋(妄想症)。

[开源] .Net orm FreeSql 1.5.0 最新版本(番号:好久不见)

迫不及待的人会问,这更新速度也太快了吧,升级会不会有问题?

不了解版本的更新日志,直接升级不是好的习惯,建议关注我们的更新日志(github 上有专门的文档);

我们的版本开发原则:在尽量保证兼容的情况下,增加新功能,砍掉少量不合理的功能;

我们的单元测试数量:4000+,这是我们引以自豪,发布版本的保障;

入戏准备

FreeSql 是 .Net ORM,能支持 .NetFramework4.0+、.NetCore、Xamarin、XAUI、Blazor、以及还有说不出来的运行平台,因为代码绿色无依赖,支持新平台非常简单。目前单元测试数量:4000+,Nuget下载数量:123K+,源码几乎每天都有提交。值得高兴的是 FreeSql 加入了 ncc 开源社区:https://github.com/dotnetcore/FreeSql,加入组织之后社区责任感更大,需要更努力做好品质,为开源社区出一份力。QQ开发群:4336577

为什么要重复造轮子?

[开源] .Net orm FreeSql 1.5.0 最新版本(番号:好久不见)

FreeSql 主要优势在于易用性上,基本是开箱即用,在不同数据库之间切换兼容性比较好。作者花了大量的时间精力在这个项目,肯请您花半小时了解下项目,谢谢。

FreeSql 整体的功能特性如下:

支持 CodeFirst 对比结构变化迁移;

支持 DbFirst 从数据库导入实体类;

支持 丰富的表达式函数,自定义解析;

支持 批量添加、批量更新、BulkCopy;

支持 导航属性,贪婪加载、延时加载、级联保存;

支持 读写分离、分表分库,租户设计;

支持 MySql/SqlServer/PostgreSQL/Oracle/Sqlite/达梦/MsAccess;

1.0 -> 1.5 更新的重要功能如下:

一、UnitOfWorkManager 工作单元管理器,可实现 Spring 事务设计;

二、IFreeSql.InsertOrUpdate 实现批量保存,执行时根据数据库自动适配执行 merge into 或者 on duplicate key update;

三、ISelect.WhereDynamicFilter 方法实现动态过滤条件(与前端交互);

四、自动适配表达式解析 yyyyMMdd 常用 c# 日期格式化;

五、IUpdate.SetSourceIgnore 方法实现忽略属性值为 null 的字段;

六、FreeSql.Provider.Dameng 基于 DmProvider Ado.net 访问达梦数据库;

七、自动识别 EFCore 常用的实体特性,FreeSql.DbContext 拥有和 EFCore 高相似度的语法,并且支持 90% 相似的 FluentApi;

八、ISelect.ToTreeList 扩展方法查询数据,把配置父子导航属性的实体加工为树型 List;

九、BulkCopy 相关方法提升大批量数据插入性能;

十、Sqlite :memrory: 内存模式;

[开源] .Net orm FreeSql 1.5.0 最新版本(番号:好久不见)

FreeSql 使用非常简单,只需要定义一个 IFreeSql 对象即可:

static IFreeSql fsql = new FreeSql.FreeSqlBuilder() .UseConnectionString(FreeSql.DataType.MySql, connectionString) .UseAutoSyncStructure(true) //自动同步实体结构到数据库 .Build(); //请务必定义成 Singleton 单例模式 一、UnitOfWorkManager 工作单元管理器 public class SongService { BaseRepository<Song> _repo; public SongService(BaseRepository<Song> repo) { _repo = repo; } [Transactional] public virtual void Test1() { _repo.Insert(new Song { Title = "卡农1" }); //事务1 this.Test2(); } [Transactional(Propagation = Propagation.Nested)] //嵌套事务,新的(不使用 Test1 的事务) public virtual void Test2() { _repo.Insert(new Song { Title = "卡农2" }); } }

BaseRepository 是 FreeSql.BaseRepository 包实现的通用仓储类,实际项目中可以继承它再使用。

Propagation 的模式参考了 Spring 事务,在以下几种模式:

Requierd:如果当前没有事务,就新建一个事务,如果已存在一个事务中,加入到这个事务中,默认的选择。

Supports:支持当前事务,如果没有当前事务,就以非事务方法执行。

Mandatory:使用当前事务,如果没有当前事务,就抛出异常。

NotSupported:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

Never:以非事务方式执行操作,如果当前事务存在则抛出异常。

Nested:以嵌套事务方式执行。(上面的例子使用的这个)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wssygg.html