2018年11月的一天,我的头很热,开了Freesql开源项目。已经四年多了。我最初从一个舒适的区域搬到一个巨大的坑中,然后回头回头。四年来一直从头开始,并经历了无数的白天和黑夜战斗(有人问我很长一段时间以来花了多长时间,答案:在过去的两年中,Full -Time X2 +以及未来两年的持续投资).today freesql已经非常强大。多亏了继续提出建议的第一个,第二和NI网民。
FreeSQL现在是一个稳定的版本,主要反映:
叹息:有人说.net被抓住了奇怪的圆圈,很少有手指向江山的一堆,.net orm真的很简单吗?
freesql是.net orm,它可以支持.netfrework4.0+,netcore,Xamarin,Maui,Blazor,并且无法说出操作平台,因为代码是绿色的和不合理的,并且支持新的新型代码非常简单平台。当前的单位测试数:6336+,Nuget下载数量:900K+.QQ组:4336577(随着时间的推移),8578575(在线),52508226(在线)(在线)
温暖的提醒:以下内容没有业务吹动成分,FreeSQL不发挥作用诳
为什么要重复轮子?
FreeSQL的主要优点是它易于使用。基本上,它用于打开盒子。最好在不同数据库之间切换兼容性。作者在该项目中花费了大量时间和精力。请要求您花半个小时了解该项目,谢谢。整个FreeSQL的功能特征如下:
5500+单元测试支持10个数据库。我们提供一般的ODBC理论支持所有数据库。目前,已知一些朋友使用FreeSQL来操作华为高斯,mycat,TIDB和其他数据库。您只需要在安装过程中选择相应的数据库实现程序包:
dotnet add packages freesql.provider.mysql
Freesql.Repository是FreeSQL项目的Yanshen扩展库,它支持.netfrework4.0+,。NetCore2.0+,。Net5+,Xamarin平台。
Freesql.Repository除了CRUD之外,还具有许多实际功能,这并不能阻止其完成10分钟。
环境1:.NET CORE或.NET 5.0+
环境2. .NET框架
方法1.扩展ifreesql的方法;
注意:存储库对象的多线程不安全,因此不应同时在多个线程上实现它。
为了促进测试代码演示,我们所有人都使用如何创建新商品
方法2.继承实施;
方法3,依赖注射;
repo.Intert插入数据,该数据适应每个数据库的优化,以执行executeaffrows/executeIDIE/executeInserted
1.如果添加了表,则在插入数据后应返回ID。
内部填充插入的self -value添加到topic.ID中填充
2.批处理插入
3.插入数据库时间
使用[列(Servertime = dateTimeKind.utc)]功能,在插入数据时,请使用适用的每个数据库内容,例如getutcdate()
4.插入特殊类型
使用[column(rereadsql =“ {0} .stastext()”,rewritesql =“地理:: stgeomfromtext({0},4236)”)。
5.插入时忽略
使用[列(caninsert = false)]功能
1.仅更新属性
2.手动管理状态
3.直接使用repo.updatediy,它是IfreesQL提供的本机Iupdate对象,这是更有功能的
实践发现,n到1不适合保存。保存主题时,保存类型信息?我个人认为从下到顶部节省的功能是无法控制的。FreeSQL不支持从下到顶部的节省。因此,让我们只谈论保存OneToone/Onetomany/Manytomany。作为许多班级,保留手动处理的使用更加安全和可控。
功能1:Savemany手工保存
完整的保存,表中存在的比较表,计算执行的添加,修改和删除。
导航属性的递归保存是不安全且无法控制的。这不是技术问题,但出于安全原因,它提供了一种节省完整保存的方法。
喜欢:
功能2:EnableCascadesave存储类保存
dbContext/存储库EnableCascadesave可以实现保存对象,并且还保留在其Onetoone/OneTomany/ManyTomany导航属性中。本文档解释了防止滥用的机制。
1. Onetoone-级别的关节保存
v3.2.606+支持和支持级关节删除功能(请浏览文档)
2. onetomany添加或更新子表,否删除现有的数据现有数据现有数据
第18层的含义,例如[类型]表,集合属性[文章],[文章]具有集合属性[comment]。
保存[类型]表对象时,他将检索集合属性[文章],然后如果保存[文章],请继续检索集合属性[comment]。
3. ManyTomany完成了完整比较以保存中间表的比较,添加外部表格
完整的比较以保存中间表,比较[许多对]中间表的数据,计算执行的添加,修改和删除。
添加外部表,仅添加或未更新。
第一个:基于[对象]级删除
例如,如果您使用了Incluble/Incliplemany查询,则可以使用此方法删除它们。
第二个:基于[数据库]级删除,不依赖于数据库外部密钥
根据设置,递归递归删除了OneToone/Onetomany/ManyTomany的相应数据,并返回已删除的数据。此功能不依赖于键外的数据库
如果内部状态管理具有数据,则将对其进行更新。
如果数据中的内部状态管理不存在,请查询数据库以确定其是否存在。
如果存在更新,则插入无存在的插入
缺点:不支持批处理操作
提醒:ifreesql还定义了插入方法。两种实施机制是不同的。它使用数据库特征:
mysqlon重复密钥更新
Dammeng Merge Intopostgresqlon冲突确实更新
人们关于冲突的大会做更新QLServererge
合并Intoodlemerge
NTU GM合并Intosqlitereplace
MSACCESS不支持Firebirdmerge进入
执行时执行时将生成上述代码endEdit方法:如下:
方案:在Winform加载表数据之后,添加,修改和删除操作后,单击[保存]
提醒:此操作仅对可变CTS有效,而不适用于整个表的比较。
支持参数化和参数-Free命令执行。有一些特定的数据库使用更高的参数数字命令来执行更高的效率,并且更直观。
Unitofwork可以将多个存储放在一个单元管理执行中,最后一般提交执行所有操作,并且内部使用数据库事务。
方法1:随时创建和使用
方法2:使用AOP + UnitofworkManager实现多项交易
本段的内容被指导在ASP.NET核心项目中管理事务。
Unitofworkmanager支持六种传播方法,这意味着交叉捕获交易非常方便,并且支持同步异步:
步骤1:配置startup.cs注入
iunitofwork电流返回当前的工作单元空隙绑定(存储库),将存储事务移交给iunitofwork开始的管理(传播,隔离)
步骤3:介绍动态代理库
获取以前的unitofworkmanager,调用其varging = begin(attr.prpagation,attr.isolationlevel)方法
在beface中调用uow.commit或回滚方法,最后致电uow.dispose
提醒:动态代理,一定要处理异步等待,否则异常交易会出现问题
步骤4:在控制器或服务中使用交易特征
可以开展业务吗?
它不一定是真实的事务,它可能是虚拟的,也就是说是一个假单位工程(无交易)
它也可以扩展到最后一项业务
根据通信模式,它也可能是一项新业务
示例项目:https://github.com/dotnetcore/freesql/tree/examples/aspnetcore_transaction
AutoFac动态代理参考项目:
FreeSQL本地用法FreeSql.Repository存储用法提供了执行CRUD操作的不可分割的方法,例如:
交叉 - 纤维,但在同一数据库服务器下,您也可以使用不可思议的(oldName => $“ db2.dbo。{oldname}”)
摘要表摘要:
v3.2.500按时间分数:https://github.com/dotnetcore/freesql/discussions/1066666
FreeSql是免费的免费ORM,也可以说是财富。
Freesql进入了第四年。我期待您十年后可以回到这里发布和回复的人,履行了十年来一直吹来的诺言。
更不用说,我希望人民的开源力量越来越强大。
我希望作者的努力能够移动您,如果您在使用并友善,可以移动您的小手指,并将文章转发,以便更多的人知道.NET具有如此良好的ORM存在。
FreeSQL使用最松散的开源协议MIT https://github.com/dotnetcore/freesql,可用于商业,完整的文档,甚至出售货币。QQGroup。52508226(在线)
