还在纠结Dapper或者EF Core?不妨试试“混合ORM”--RepoDb
在.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相关推荐
- 你的颈椎还好吗?得了颈椎病,不妨试试这几个方法
现如今电子产品得到了很大的普及,而且人们的工作方式也发生了巨大的改变,导致大多数人都成为了低头一族,无形中增加了颈椎的负担,促使颈椎病的发生几率变得越来越高,如果得不到及时有效的治疗,不但会引发颈部疼 ...
- EF Core的学习之路01
本文章是我听B站杨中科的所做的笔记 杨中科B站视频链接:.NET 6教程,.Net Core 2022视频教程,杨中科主讲_哔哩哔哩_bilibili 什么时ORM 1.说明:本课程需要你有数据库.S ...
- 一步步学习EF Core(3.EF Core2.0路线图)
前言 这几天一直在研究EF Core的官方文档,暂时没有发现什么比较新的和EF6.x差距比较大的东西.不过我倒是发现了EF Core的路线图更新了,下面我们就来看看 今天我们来看看最新的EF Core ...
- 跟我一起学.NetCore之EF Core 实战入门,一看就会
前言 还记得当初学习数据库操作时,用ADO.NET一步一步地进行数据操作及查询,对于查询到的数据还得对其进行解析,然后封装返回给应用层:遇到这种重复而繁琐的工作,总有一些大神或团队对其进行封装,从而出 ...
- 记一次EF Core连接MySql、Oracle
点击上方"Dotnet9"添加关注哦 上上个月写的一篇文章,今天有同事问我使用EF Core连接MySql和Oracel的问题,我把这篇文章直接甩给了他. 下面是正文: 这几天研究 ...
- EF Core For MySql查询中使用DateTime.Now作为查询条件的一个小问题
背景 最近一直忙于手上澳洲线上项目的整体迁移和升级的准备工作,导致博客和公众号停更.本周终于艰难的完成了任务,借此机会,总结一下项目中遇到的一些问题. EF Core 一直是我们团队中中小型项目常用的 ...
- Oracle .NET Core Beta驱动已出,自己动手写EF Core Oracle
使用.net core也有一段时间了,一直都没有Oracle官方的正式版驱动程序,更别说EF版本了.之前基于Oracle官方的.net core预览版本写了个Dapper的数据库操作实现,但是总感觉不 ...
- 张高兴的 Entity Framework Core 即学即用:(一)创建第一个 EF Core 应用
写在前面 Entity Framework Core (EF Core) 是 .NET 平台流行的对象关系映射(ORM)框架.虽然 .NET 平台中 ORM 框架有很多,比如 Dapper.NHibe ...
- 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 官方教程: ...
最新文章
- PHP中session和cookie的区别
- 中以什么开头仅可注释单行_Python从入门到精通第006课--注释与变量
- 使用SAP CRM中间件从ERP下载Customer的错误消息:Customer classification does not exist
- swing下拉框从mysql_Java Swing应用程序 JComboBox下拉框联动查询
- python中的多线程-threading
- 为什么总是有人说Java啰嗦,却没人说C++啰嗦?
- 创业公司引导页html5模板
- 基于微型计算机系统的实时时钟设计,基于51单片机的实时时钟设计报告.doc
- 蓝桥杯 ALGO-10 算法训练 集合运算
- 【Mybatis笔记】mybatis实现mysql增删改查
- 04.如何升级扩展以支持Visual Studio 2019
- 借助 Lucene.Net 构建站内搜索引擎(上)
- 澳洲国立与渥太华计算机科学,山东小伙斩获渥太华电子工程专业及多伦多计算机科学专业录取!...
- 百度AI车牌识别测试
- 重庆html5全景,用pano2vr 转swf 全景图
- 【UER #7】套路
- RTX 4070TI和RTX 4090性能差距 RTX4070ti和4070区别对比
- 快传号怎么过新手期,快传号新手期转正条件是什么
- windows输入法英文字体间距比平常大,按照设置里按下"shift+space“键,也依然如此
- 【源码】核磁共振成像的脑部肿瘤检测与分类