前言:
最近有很多同学问我.NET方面有哪些好用的ORM框架,我觉得这方面的介绍网上应该会介绍的比较全面文章,于是我想搜一篇全面的介绍文章发给他们结果我发现网上说来说去基本上就是那几个,于是就有了这篇文章。该篇文章已收录到【DotNetGuide(C#/.NET/.NET Core学习、工作、面试指南)】GitHub知识库中欢迎大家前往订阅(有帮助的话别忘了给我一颗小星星⭐)!
为了方便大家对C#/.NET/.NET Core学习、工作、面试等相关问题进行交流我建了一个DotNetGuide技术交流群(广告勿扰,入群二维码过期可关注公众号进群)
什么是ORM?
ORM 是 Object Relational Mapping 的缩写,译为“对象关系映射”,是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。它解决了对象和关系型数据库之间的数据交互问题,ORM的作用是在关系型数据库和业务实体对象之间作一个映射,这样我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法。
如何选择合适自己的ORM框架?
对于我们而言选择ORM框架的目的其实都是为了让我们的程序更好的操作数据库,提高开发编程效率和程序的维护拓展性。因此我们在为自己负责的项目选择合适的ORM框架的时候需要从项目的业务场景出发,选择最适合自己团队的ORM框架(注意没有完美的框架,适合团队的才是最好的)。以下是一些比较好用且优秀的.NET-ORM框架,排名不分先后可供大家参考学习(假如您有更好的.NET相关ORM推荐请在文末留言,谢谢)。
EF/EF Core
Entity Framework (EF) Core 是轻量化、可扩展、开源和跨平台版的常用 Entity Framework 数据访问技术,EF Core 是适用于 .NET 的现代对象数据库映射器。它支持 LINQ 查询、更改跟踪、更新和架构迁移。EF Core 通过提供程序插件 API 与 SQL Server、Azure SQL 数据库、SQLite、Azure Cosmos DB、MySQL、PostgreSQL 和其他数据库一起使用。(微软官方出品)。
EF Core 可用作对象关系映射程序 (O/RM),这可以实现以下两点:
- 使 .NET 开发人员能够使用 .NET 对象处理数据库。
- 无需再像通常那样编写大部分数据访问代码。
官方文档教程:https://docs.microsoft.com/zh-cn/ef/
GitHub地址:https://github.com/dotnet/efcore
以下是EF/EF Core相关拓展程序包:
- EFCore.BulkExtensions – EF的批量操作库。
- EntityFramework-Plus – EF的增强工具集,包括过滤器,审核,缓存,查询,批删除,批更新等。
- EntityFramework.Exceptions – 当您的SQL查询违反SqlServer,MySql或PostgreSQL中的数据库约束时,请对EntityFrameworkCore使用类型化的异常处理。
- EntityFramework.Triggers – EF触发器。
- EntityFramework.Rx – EF的Reactive 扩展程序。
- Npgsql.EntityFrameworkCore.PostgreSQL – PostgreSQL的EF驱动程序。
- EntityFramework.TypedOriginalValues – 通过某些特殊方法来获得数据库对象在本次修改前的原始值。常见的使用场景是对数据库操作的数据做审计。
- EntityFramework.VersionedProperties – 将对象里每次变更历史自动保存到一个特定的属性里。审计或者做历史版本时比较适用。
- LINQKit – LINQKit是LINQ对SQL和Entity Framework的免费扩展集。
- Pomelo.EntityFrameworkCore.MySql – mysql的EF驱动程序。
- spectre.query – EF的简单查询库。
- StoredProcedureEFCore-用于执行存储过程的 Entity Framework Core 扩展。
Dapper
Dapper是一个简单的.NET对象映射器,在速度方面具有”King of Micro ORM”的头衔,几乎与使用原始的ADO.NET数据读取器一样快。ORM是一个对象关系映射器,它负责数据库和编程语言之间的映射。Dapper通过扩展IDbConnection提供一些有用的扩展方法去查询您的数据库。
主要特点:高性能、易排查、易运维、灵活可控。
GitHub地址:https://github.com/DapperLib/Dapper
以下是Dapper相关拓展程序包:
- Dapper-Extensions – Dapper Extensions 是一个小型ORM库,通过为您的 POCO 添加基本的 CRUD 操作(获取、插入、更新、删除)来补充Dapper。对于更高级的查询场景,Dapper Extensions 提供了一个谓词系统。这个库的目标是通过不需要任何属性或基类继承来保持你的 POCO 纯净。
- Dapper-FluentMap – Dapper的扩展。
- Dommel – Dapper的CRUD操作。
- MicroOrm.Dapper.Repositories – Dapper的CRUD操作。
FreeSql
FreeSql 是一款功能强大的对象关系映射(O/RM)组件,支持 .NET Core 2.1+、.NET Framework 4.0+ 以及 Xamarin。
主要特点:
- 支持 CodeFirst 模式,即便使用 Access 数据库也支持数据迁移;
- 支持 DbFirst 模式,支持从数据库导入实体类,或使用实体类生成工具生成实体类;
- 支持 深入的类型映射,比如 PgSql 的数组类型等;
- 支持 丰富的表达式函数,以及灵活的自定义解析;
- 支持 导航属性一对多、多对多贪婪加载,以及延时加载;
- 支持 读写分离、分表分库、过滤器、乐观锁、悲观锁;
- 支持 MySql/SqlServer/PostgreSQL/Oracle/Sqlite/Firebird/达梦/人大金仓/神舟通用/南大通用/翰高/ClickHouse/Access 等数据库;
官方文档地址:http://www.freesql.net/
GitHub地址:https://github.com/dotnetcore/FreeSql
SqlSugar
SqlSugar是一款老牌 .NET 开源ORM框架,支持.NET CORE 和 MySql、SqlServer、Sqlite、Oracle 、 postgresql 、达梦、人大金仓 数据库,具有EF NH的功能,比EF更人性化的语法,支持真实的批量操作,另外还有媲美Dapper的性能。
主要特点:简单易用、功能齐全、高性能、轻量级、服务齐全、支持全自动分表组件,SAAS分库,大数据处理的ORM。 官网地址:
http://www.donet5.com GitHub地址:
https://github.com/donet5/SqlSugar
Chloe
Chloe 是一个轻量级的对象/关系映射(ORM)库。查询接口类似于 LINQ。您可以使用 Chloe.ORM 通过 lambda 查询 LINQ 之类的数据并执行任何操作(加入查询 | 组查询 | 聚合查询 | 插入 | 批量更新 | 批量删除)。
文档地址:https ://github.com/shuxinqin/Chloe/wiki
GitHub地址:https://github.com/shuxinqin/Chloe
nhibernate-core
NHibernate 是一个成熟的开源对象关系映射器,适用于 .NET 框架。它被积极开发,功能齐全,并在数千个成功的项目中使用。
NHibernate社区网站 – https://nhibernate.info
GitHub地址:https://github.com/nhibernate/nhibernate-core
SmartSql
SmartSql = C# 中的 MyBatis + .NET Core+ 缓存(内存 | Redis)+ R/W 拆分 + PropertyChangedTrack +动态存储库 + InvokeSync + 诊断。
SmartSql 借鉴了 MyBatis 的思想,使用 XML 来管理 SQL ,并且提供了若干个筛选器标签来消除代码层面的各种 if/else 的判断分支。SmartSql将管理你的 SQL ,并且通过筛选标签来维护本来你在代码层面的各种条件判断,使你的代码更加优美。
主要特点:简洁、高效、高性能、扩展性、监控、渐进式开发!
文档地址: https://smartsql.net/guide/
GitHub地址:https://github.com/dotnetcore/SmartSql
PetaPoco
PetaPoco 是一个用于 .NET(4、4.5+、net standard 2.0+)和 Mono 的微型、快速、易于使用的 micro-ORM。由于 PetaPoco 所代表的简单性和易用性,它受到许多人的喜爱。PetaPoco 是首选的微 ORM,也是任何体面的开发人员工具包中必不可少的实用程序。
主要特点:
- 与Dapper一样,它很快,因为它使用动态方法生成 (MSIL) 将列值分配给属性。
- 像Massive一样,它现在也支持动态 Expandos。
- 与ActiveRecord一样,它支持对象和数据库表之间的密切关系。
- 与SubSonic一样,它支持使用 T4 模板生成 poco 类(仅限 V5)。
- 与Massive一样,它以单个文件的形式提供,您可以轻松地将其添加到任何项目或编译(仅限 V5)。
文档地址:
https://discoverdot.net/projects/peta-poco GitHub地址:
https://github.com/CollaboratingPlatypus/PetaPoco
linq2db
LINQ to DB 是最快的LINQ数据库访问库,在POCO对象和数据库之间提供了一个简单、轻量、快速且类型安全的层。
在架构上,它比 Dapper、Massive 或 PetaPoco 等微 ORM 高出一步,因为您使用 LINQ 表达式,而不是魔术字符串,同时在代码和数据库之间维护一个薄抽象层。您的查询由 C# 编译器检查并允许轻松重构。
但是,它不像 LINQ to SQL 或实体框架那么重。没有更改跟踪,因此您必须自己进行管理,但从积极的方面来说,您可以获得更多控制权并更快地访问您的数据。
文档地址:https://linq2db.github.io/
GitHub地址:https://github.com/linq2db/linq2db
RepoDb
RepoDB 是一个开源的 .NET ORM 库,它弥补了微 ORM 和全 ORM 的差距。它可以帮助您在开发过程中简化何时使用 BASIC 和 ADVANCE 操作的切换。
主要特点:
- 易于使用– 这些操作都作为您的 IDbConnection 对象的扩展方法实现。只要您的连接处于打开状态,就可以对您的数据库调用任何操作。
- 高性能– 它缓存已经生成的编译表达式以供将来重用和执行。它了解您的架构以创建最佳的编译表达式 AOT。
- 内存高效– 它提取并缓存您的对象属性、执行上下文、对象映射和 SQL 语句。它在整个转换和执行过程中重用它们。
- 动态和混合– 它提供了成熟 ORM 的一些高级功能。它极大地帮助开发人员在开发过程中进行上下文切换时简化体验。
- 开源软件——它是一个开源软件,并且永远是免费的。它旨在进一步改进 .NET 数据访问体验和解决方案,以及社区的集体思想。
- 高质量– 它是一个高质量的微型 ORM,由 10K+ 真实单元和集成测试支持。它经过高度测试,并被生产环境中运行的各种关键系统使用。
GitHub地址:https://github.com/mikependon/RepoDB
ServiceStack.OrmLite
OrmLite是一个快速、简单、类型化的.NET ORM,OrmLite 的目标是提供一个方便、DRY、无配置、与 RDBMS 无关的类型包装器,该包装器与 SQL 保持高度亲和性,公开直观的 API,生成可预测的 SQL 并干净地映射到断开连接和数据传输对象 (DTO) 友好、普通的旧C# 对象 (POCO)。这种方法更容易推理您的数据访问,从而清楚地知道什么 SQL 在什么时间执行,同时减轻意外行为、隐式 N+1 查询和重对象关系映射器 (ORM) 中普遍存在的泄漏数据访问。
文档地址:https://docs.servicestack.net/ormlite/
GitHub地址:https://github.com/ServiceStack/ServiceStack.OrmLite
SQLite-net
简单、强大、跨平台的 SQLite 客户端和 .NET 的 ORM。
主要特点:
-
非常容易与现有项目集成并在所有 .NET 平台上运行。
-
SQLite 上的瘦包装器,快速高效。(这个库不应该是您查询的性能瓶颈。)
-
用于安全执行 CRUD 操作和查询(使用参数)并以强类型方式检索这些查询结果的非常简单的方法。
-
与您的数据模型一起工作,而不会强迫您更改您的类。(包含一个小的反射驱动 ORM 层。)
GitHub地址:https://github.com/praeclarum/sqlite-net
Insight.Database
Insight.Database是一个用于 .NET 的快速、轻量级的 micro-orm。
GitHub地址:https://github.com/jonwagner/Insight.Database
cyqdata
cyq.data是一个高性能且功能最强大的orm(支持.NET Core),支持Txt、Xml、Access、Sqlite、Mssql、Mysql、Oracle、Sybase、Postgres、DB2、Redis、MemCache。
GitHub地址:https://github.com/cyq1162/cyqdata
TinyORM
TinyORM是一个简单、快速且安全的微型.NET ORM。
Wiki地址:https://github.com/sdrapkin/SecurityDriven.TinyORM/wiki
GitHub地址:https://github.com/sdrapkin/SecurityDriven.TinyORM