前言:

最近有很多同学问我.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相关拓展程序包:

Dapper

Dapper是一个简单的.NET对象映射器,在速度方面具有"King of Micro ORM"的头衔,几乎与使用原始的ADO.NET数据读取器一样快。ORM是一个对象关系映射器,它负责数据库和编程语言之间的映射。Dapper通过扩展IDbConnection提供一些有用的扩展方法去查询您的数据库。
主要特点:高性能、易排查、易运维、灵活可控。
 

以下是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

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 ,并且通过筛选标签来维护本来你在代码层面的各种条件判断,使你的代码更加优美。

主要特点:简洁、高效、高性能、扩展性、监控、渐进式开发!

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)。

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

2022年了有哪些值得推荐的.NET ORM框架?的更多相关文章

  1. 值得推荐的C/C++框架和库

    值得推荐的C/C++框架和库 [本文系外部转贴,原文地址:http://coolshell.info/c/c++/2014/12/13/c-open-project.htm]留作存档 下次造轮子前先看 ...

  2. 值得推荐的C/C++框架和库 (真的很强大) c

    http://m.blog.csdn.net/mfcing/article/details/49001887 值得推荐的C/C++框架和库 (真的很强大) 发表于2015/10/9 21:13:14 ...

  3. 【转载】值得推荐的C/C++框架和库

    原文:值得推荐的C/C++框架和库 值得学习的C语言开源项目 Libevent libev是一个开源的事件驱动库,基于epoll,kqueue等OS提供的基础设施.其以高效出名,它可以将IO事件,定时 ...

  4. 【转】 值得推荐的C/C++框架和库 (真的很强大)

    [转] 值得推荐的C/C++框架和库 (真的很强大) 值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个 ...

  5. 1.值得推荐的C/C++框架和库 (转)

    值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的 ...

  6. 转:值得推荐的C/C++框架和库(真的很强大)

    目录(?)[+] 值得学习的C语言开源项目 - 1 Webbench - 2 Tinyhttpd - 3 cJSON - 4 CMockery - 5 Libev - 6 Memcached - 7 ...

  7. 值得推荐的C/C++框架和库 (真的很强大)

    值得学习的C语言开源项目 - 1. Webbench Webbench是一个在Linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的 ...

  8. 值得推荐的C/C++框架和库(转)

    值得学习的C语言开源项目 C++ 资源大全 值得学习的C语言开源项目 1.Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我 ...

  9. 值得推荐的C/C++框架和库 very good

    [本文系外部转贴,原文地址:http://coolshell.info/c/c++/2014/12/13/c-open-project.htm]留作存档 下次造轮子前先看看现有的轮子吧 值得学习的C语 ...

随机推荐

  1. 自定义异步爬虫架构 - AsyncSpider

    作者:张亚飞 山西医科大学在读研究生 1. 并发编程 Python中实现并发编程的三种方案:多线程.多进程和异步I/O.并发编程的好处在于可以提升程序的执行效率以及改善用户体验:坏处在于并发的程序不容 ...

  2. Kube-OVN1.5.0新版本发布,支持鲲鹏云平台网络平面部署

    近日,Kube-OVN发布了最新的1.5.0版本.自2019年4月开源以来,Kube-OVN经历了15次重要版本迭代,以及社区成立,建设者贡献代码,稳定性测试,国内外用户开始在生产环境中投入使用,企业 ...

  3. Spring循环依赖原理

    Spring循环依赖的原理解析 1.什么是循环依赖? ​ 我们使用Spring的时候,在一个对象中注入另一个对象,但是另外的一个对象中也包含该对象.如图: 在Student中包含了teacher的一个 ...

  4. leetcode 54. 螺旋矩阵 及 59. 螺旋矩阵 II

    54. 螺旋矩阵 问题描述 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, ...

  5. Java构造器(构造方法)

    类中的构造器也成为构造方法,是在进行创建对象的时候必须调用的,并且构造器有以下两个特点: 1.必须和类名字相同 2.必须没有返回类型也不能写void public class Demo06 { //一 ...

  6. Zotero群组新建后无法显示

    我们新建Zotero的群组后无法显示. 此时需要点击文献库,就刷新了. 修改Zotero的群组后无法显示修改后的名称 点击同步即可同步内容.

  7. azure 控制台小工具

    这个控制台往往被忽略.

  8. 关于3G移动通信网络中用户ip的配置过程的研究(中国电信cdma2000)

    在RP口对ppp过程进行研究 PPP协商过程,如下图所示: 在建立ppp过程中pdsn需要与FAAA.HAAA交互.同时在分组数据业务进行过程中这种交互更加频繁,介绍如下,分为两种情况,简单ip,移动 ...

  9. tep0.9.5支持自定义扩展request

    tep0.9.5更新了以下内容: 自定义request请求日志 Allure报告添加request描述 猴子补丁扩展request fixtures支持多层级目录 FastAPI替代Flask 升级t ...

  10. QPS、TPS、并发用户数、吞吐量

    1.QPS QPS Queries Per Second 是每秒查询率 ,是一台服务器 每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内 所处理流量多少的衡量标准, 即每秒的响应请求数,也 ...