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

支持的操作符:Contains/StartsWith/EndsWith/NotContains/NotStartsWith/NotEndsWith、Equals/Eq/NotEqual、GreaterThan/GreaterThanOrEqual、LessThan/LessThanOrEqual

四、表达式解析 yyyyMMdd c# 常用日期格式化

不知道大家有没有这个困扰,在 ORM 表达式使用 DateTime.Now.ToString("yyyyMM") 是件很难转换的事,在我适配的这些数据库中,只有 MsAccess 可以直接翻译成对应的 SQL 执行。

这个想法来自另一个 ORM issues,我时不时会去了解其他 ORM 优点和缺陷,以便给 FreeSql 做补充。

想法出来之后当于,也就是昨天 2020/5/24 奋战一宿完成的,除了每个数据库进行编码适配外,更多的时间耗在了单元测试上,目前已全部通过(4000+单元测试不是吹的)。

仅以此功能让大家感受一下 FreeSql 的认真,他不是一些人口中所说的个人项目,谢谢。

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

var dtn = DateTime.Parse("2020-1-1 0:0:0"); var dts = Enumerable.Range(1, 12).Select(a => dtn.AddMonths(a)) .Concat(Enumerable.Range(1, 31).Select(a => dtn.AddDays(a))) .Concat(Enumerable.Range(1, 24).Select(a => dtn.AddHours(a))) .Concat(Enumerable.Range(1, 60).Select(a => dtn.AddMinutes(a))) .Concat(Enumerable.Range(1, 60).Select(a => dtn.AddSeconds(a))); foreach (var dt in dts) { Assert.Equal(dt.ToString("yyyy-MM-dd HH:mm:ss.fff"), fsql.Select<T>().First(a => dt.ToString())); Assert.Equal(dt.ToString("yyyy-MM-dd HH:mm:ss"), fsql.Select<T>().First(a => dt.ToString("yyyy-MM-dd HH:mm:ss"))); Assert.Equal(dt.ToString("yyyy-MM-dd HH:mm"), fsql.Select<T>().First(a => dt.ToString("yyyy-MM-dd HH:mm"))); Assert.Equal(dt.ToString("yyyy-MM-dd HH"), fsql.Select<T>().First(a => dt.ToString("yyyy-MM-dd HH"))); Assert.Equal(dt.ToString("yyyy-MM-dd"), fsql.Select<T>().First(a => dt.ToString("yyyy-MM-dd"))); Assert.Equal(dt.ToString("yyyy-MM"), fsql.Select<T>().First(a => dt.ToString("yyyy-MM"))); Assert.Equal(dt.ToString("yyyyMMddHHmmss"), fsql.Select<T>().First(a => dt.ToString("yyyyMMddHHmmss"))); Assert.Equal(dt.ToString("yyyyMMddHHmm"), fsql.Select<T>().First(a => dt.ToString("yyyyMMddHHmm"))); Assert.Equal(dt.ToString("yyyyMMddHH"), fsql.Select<T>().First(a => dt.ToString("yyyyMMddHH"))); Assert.Equal(dt.ToString("yyyyMMdd"), fsql.Select<T>().First(a => dt.ToString("yyyyMMdd"))); Assert.Equal(dt.ToString("yyyyMM"), fsql.Select<T>().First(a => dt.ToString("yyyyMM"))); Assert.Equal(dt.ToString("yyyy"), fsql.Select<T>().First(a => dt.ToString("yyyy"))); Assert.Equal(dt.ToString("HH:mm:ss"), fsql.Select<T>().First(a => dt.ToString("HH:mm:ss"))); Assert.Equal(dt.ToString("yyyy MM dd HH mm ss yy M d H hh h"), fsql.Select<T>().First(a => dt.ToString("yyyy MM dd HH mm ss yy M d H hh h"))); Assert.Equal(dt.ToString("yyyy MM dd HH mm ss yy M d H hh h m s tt t").Replace("上午", "AM").Replace("下午", "PM").Replace("上", "A").Replace("下", "P"), fsql.Select<T>().First(a => dt.ToString("yyyy MM dd HH mm ss yy M d H hh h m s tt t"))); }

支持常用 c# 日期格式化,yyyy MM dd HH mm ss yy M d H hh h m s tt t

tt t 为 AM PM

AM PM 这两个转换不完美,勉强能使用。

五、IUpdate.SetSourceIgnore 不更新 null 字段

这个功能被用户提了几次,每一次都认为 FreeSql.Repository 的状态对比可以完成这件事。

这一次作者心疼他们了,为什么一定要用某个功能限制住使用者?大家是否经常听谁说 EF框架、MVC框架,框架的定义其实是约束+规范。

作者不想做这样的约束,作者更希望尽量提供多一些实用功能让用户自己选择,把项目定义为:功能组件。

fsql.Update<Song>() .SetSourceIgnore(item, col => col == null) .ExecuteAffrows();

第二个参数是 Func<object, bool> 类型,col 相当于属性的值,上面的代码更新实体 item 的时候会忽略 == null 的属性。

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

六、Ado.net 访问达梦数据库

武汉达梦数据库有限公司成立于2000年,为中国电子信息产业集团(CEC)旗下基础软件企业,专业从事数据库管理系统的研发、销售与服务,同时可为用户提供大数据平台架构咨询、数据技术方案规划、产品部署与实施等服务。多年来,达梦公司始终坚持原始创新、独立研发,目前已掌握数据管理与数据分析领域的核心前沿技术,拥有全部源代码,具有完全自主知识产权。

不知道大家没有听说过相关政策,政府推动国产化以后是趋势,虽然 .NET 不是国产,但是目前无法限制编程语言,当下正在对操作系统、数据库强制推进。

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

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

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