在.NET世界中,提到ORM,最常用的是下面2个:

  • Dapper,通过提供IDbConnection的扩展方法来查询数据库。它的优点在于可以轻松地执行参数化查询,将结果转化为对象;非常高效,在速度方面拥有micro-ORM之王的称号。

  • EF Core,微软开源的ORM。它的优点在于允许执行CRUD操作而无需编写SQL。

那有不有把2者优点结合的ORM呢?

RepoDb

RepoDb是一个轻量级、高性能、高效的混合ORM。它提供了Dapper相似的简单性,同时又像EF Core将一些复杂的操作进行了封装, 因此它被认为是一种“混合ORM”。

RepoDb在“微”和“全”操作的使用之间切换很容易,这为开发人员在开发应用程序时提供了灵活性。

“高性能”和“低内存使用率”是这个库的主要特点,你可以从下面这张图中窥见一斑:

RepoDb支持SQL Server, SQLite, MySQL和PostgreSQL数据库,下面就让我们使用SQL Server数据库来了解一下RepoDb有哪些特别之处!

基础功能

首先,需要引用Nuget包RepoDb.SqlServer

然后,在程序启动时进行初始化:

RepoDb.SqlServerBootstrap.Initialize();

RepoDB所有功能都支持 Raw-SQL/Fluent 2种方式。

CRUD

//Raw-SQL
using (var connection = new SqlConnection(ConnectionString))
{var user = connection.Query<User>("SELECT * FROM [dbo].[User] WHERE (Id = @Id);", new { Id = 1 }).FirstOrDefault();
}//Fluent
using (var connection = new SqlConnection(ConnectionString))
{var user = connection.Query<User>(e => e.Id == 1).FirstOrDefault();
}//Raw-SQL
using (var connection = new SqlConnection(ConnectionString))
{var affectedRows = connection.ExecuteScalar<int>("UPDATE [dbo].[User] SET Name = @Name WHERE Id = @Id;",new{Id = 1,Name = "My IO",});
}//Fluent
using (var connection = new SqlConnection(ConnectionString))
{var user = new User{Id = 1,Name = "My IO",};var affectedRows = connection.Update<User>(user);
}

多表查询

using (var connection = new SqlConnection(ConnectionString))
{var orderId = 10045;var tuple = connection.QueryMultiple<Order, OrderItems>(order => order.Id == orderId, orderItem => orderItem.OrderId == orderId);var order = tuple.Item1.FirstOrDefault();var orderItems = tuple.Item2.AsList();order.OrderItems = orderItems;
}

in查询

using (var connection = new SqlConnection(ConnectionString))
{var names = new [] { "wx", "My IO" };var users = connection.Query<user>(e => names.Contains(e => e.Name));
}

高级功能

下面举例几个Dapper和EF Core默认不支持的功能。

Merge

用于插入新行或更新表中的现有行。默认使用Id作为条件,也可以用qualifiers指定条件:

var user = new User
{Name = "My IO",Age = 20,
};
using (var connection = new SqlConnection(ConnectionString))
{var id = connection.Merge(user, qualifiers: (p => new { p.Name }));
}

批量操作

如果要执行批量操作,比如BulkDelete, BulkInsert, BulkMerge和BulkUpdate,必须先安装Nuget包RepoDb.SqlServer.BulkOperations

using (var connection = new SqlConnection(connectionString))
{var users = GetUsers(10000);var insertedRows = connection.BulkInsert(users);
}

分页

using (var connection = new SqlConnection(connectionString))
{var orderBy = OrderField.Parse(new { Id = Order.Descending });var page = 0; // 从0开始var rowsPerBatch = 20; //每页20条var people = connection.BatchQuery<User>(page: page,rowsPerBatch: rowsPerBatch,orderBy: orderBy,where: e => e.IsActive == true);
}

结论

篇幅有限,RepoDb的其他功能在这就不做介绍了,你可以到官网(https://repodb.net/)进行详细了解。

总体来说,使用RepoDb开发代码更容易、更快捷。

RepoDb具有Dapper很多没有的可立即使用的丰富功能集。使用它,必将帮助你快速交付代码。

如果你觉得这篇文章对你有所启发,请关注我的个人公众号”My IO“,记住我!

还在纠结Dapper或者EF Core?不妨试试“混合ORM”--RepoDb相关推荐

  1. 你的颈椎还好吗?得了颈椎病,不妨试试这几个方法

    现如今电子产品得到了很大的普及,而且人们的工作方式也发生了巨大的改变,导致大多数人都成为了低头一族,无形中增加了颈椎的负担,促使颈椎病的发生几率变得越来越高,如果得不到及时有效的治疗,不但会引发颈部疼 ...

  2. EF Core的学习之路01

    本文章是我听B站杨中科的所做的笔记 杨中科B站视频链接:.NET 6教程,.Net Core 2022视频教程,杨中科主讲_哔哩哔哩_bilibili 什么时ORM 1.说明:本课程需要你有数据库.S ...

  3. 一步步学习EF Core(3.EF Core2.0路线图)

    前言 这几天一直在研究EF Core的官方文档,暂时没有发现什么比较新的和EF6.x差距比较大的东西.不过我倒是发现了EF Core的路线图更新了,下面我们就来看看 今天我们来看看最新的EF Core ...

  4. 跟我一起学.NetCore之EF Core 实战入门,一看就会

    前言 还记得当初学习数据库操作时,用ADO.NET一步一步地进行数据操作及查询,对于查询到的数据还得对其进行解析,然后封装返回给应用层:遇到这种重复而繁琐的工作,总有一些大神或团队对其进行封装,从而出 ...

  5. 记一次EF Core连接MySql、Oracle

    点击上方"Dotnet9"添加关注哦 上上个月写的一篇文章,今天有同事问我使用EF Core连接MySql和Oracel的问题,我把这篇文章直接甩给了他. 下面是正文: 这几天研究 ...

  6. EF Core For MySql查询中使用DateTime.Now作为查询条件的一个小问题

    背景 最近一直忙于手上澳洲线上项目的整体迁移和升级的准备工作,导致博客和公众号停更.本周终于艰难的完成了任务,借此机会,总结一下项目中遇到的一些问题. EF Core 一直是我们团队中中小型项目常用的 ...

  7. Oracle .NET Core Beta驱动已出,自己动手写EF Core Oracle

    使用.net core也有一段时间了,一直都没有Oracle官方的正式版驱动程序,更别说EF版本了.之前基于Oracle官方的.net core预览版本写了个Dapper的数据库操作实现,但是总感觉不 ...

  8. 张高兴的 Entity Framework Core 即学即用:(一)创建第一个 EF Core 应用

    写在前面 Entity Framework Core (EF Core) 是 .NET 平台流行的对象关系映射(ORM)框架.虽然 .NET 平台中 ORM 框架有很多,比如 Dapper.NHibe ...

  9. asp.net mysql 创建变_[ASP.net教程]EF Core使用CodeFirst在MySql中创建新数据库以及已有的Mysql数据库如何使用DB First生成域模型...

    [ASP.net教程]EF Core使用CodeFirst在MySql中创建新数据库以及已有的Mysql数据库如何使用DB First生成域模型 0 2018-06-30 07:00:08 官方教程: ...

最新文章

  1. PHP中session和cookie的区别
  2. 中以什么开头仅可注释单行_Python从入门到精通第006课--注释与变量
  3. 使用SAP CRM中间件从ERP下载Customer的错误消息:Customer classification does not exist
  4. swing下拉框从mysql_Java Swing应用程序 JComboBox下拉框联动查询
  5. python中的多线程-threading
  6. 为什么总是有人说Java啰嗦,却没人说C++啰嗦?
  7. 创业公司引导页html5模板
  8. 基于微型计算机系统的实时时钟设计,基于51单片机的实时时钟设计报告.doc
  9. 蓝桥杯 ALGO-10 算法训练 集合运算
  10. 【Mybatis笔记】mybatis实现mysql增删改查
  11. 04.如何升级扩展以支持Visual Studio 2019
  12. 借助 Lucene.Net 构建站内搜索引擎(上)
  13. 澳洲国立与渥太华计算机科学,山东小伙斩获渥太华电子工程专业及多伦多计算机科学专业录取!...
  14. 百度AI车牌识别测试
  15. 重庆html5全景,用pano2vr 转swf 全景图
  16. 【UER #7】套路
  17. RTX 4070TI和RTX 4090性能差距 RTX4070ti和4070区别对比
  18. 快传号怎么过新手期,快传号新手期转正条件是什么
  19. windows输入法英文字体间距比平常大,按照设置里按下"shift+space“键,也依然如此
  20. 【源码】核磁共振成像的脑部肿瘤检测与分类

热门文章

  1. RAID 01 和RAID 10的区别
  2. 51CTO各位博友大家好!
  3. django model filter 条件过滤,及多表连接查询、反向查询,某字段的distinct
  4. openfire 插件开发例子
  5. 通过 Lotus Domino Java 代理消费 Web 服务
  6. 双绞线直连法如何才能使两台电脑实现共享
  7. linux启动时挂载rootfs的几种方式 .
  8. Visual Studio 2019 preview中体验C# 8.0新语法
  9. springMVC--XML解析
  10. 从浏览器地址栏输入url到显示页面的步骤