当前位置: 首页 > 网络应用技术

.NET ONET ORM的必要功能简介FreeSQL存储库实施文章

时间:2023-03-06 14:50:56 网络应用技术

  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(在线)