探索Dapper与EF Core等ORM框架的神器

2024-05-15 19:04

本文主要是介绍探索Dapper与EF Core等ORM框架的神器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Dapper的好处:

  1. 轻量级:Dapper是一个非常轻量级的库,对性能的影响非常小。它主要关注于执行SQL查询和映射查询结果到对象,因此它的设计和实现都非常简洁。
  2. 直接SQL:Dapper鼓励直接写SQL,而不是使用抽象查询语法。这使得开发者能够充分利用数据库的能力,进行复杂的查询和性能优化。
  3. 动态映射:Dapper支持动态地映射查询结果到对象,无需事先定义对象结构。这使得它在处理动态数据或不确定结构的数据时非常灵活。
  4. 异步支持:Dapper提供异步方法,支持异步数据库操作。这在处理大量并发请求时非常有用,可以提高系统的吞吐量和响应速度。
  5. 简单API:Dapper的API非常简洁,易于学习和使用。这使得开发者可以快速上手,并高效地编写数据库操作代码。

EF Core的好处:

  1. 自动生成数据库架构:EF Core提供了自动生成数据库架构的能力。这使得开发人员可以轻松地创建和更新数据库表结构,而无需手动编写SQL脚本。这大大加快了开发速度,并减少了出错的可能性。
  2. 快速迭代:使用EF Core可以快速迭代开发。通过简单的代码更改即可更新数据库架构,避免了手动编辑SQL脚本的繁琐过程。
  3. 可移植性:EF Core支持多种数据库提供程序(例如SQL Server、MySQL、PostgreSQL等)。开发人员可以通过更改配置,轻松地将应用程序迁移到不同的数据库平台。
  4. 易于维护:自动生成的数据库架构保持与实体类的一致性。当有新的实体类添加到应用程序中时,数据库架构可以自动更新。这减少了手动维护数据库架构的工作量。

一、EF Core 

我使用的是MySQL需要使用到 MySql.Data.EntityFrameworkCorePomelo.EntityFrameworkCore.MySql包

①在appsettings.json中配置数据库连接

{"Logging": {"LogLevel": {"Default": "Information","Microsoft.AspNetCore": "Warning"}},"ConnectionStrings": {"MySqlConnection": "Server=127.0.0.1;Database=efceshi;Uid=root;Pwd=gsgs2021;SslMode=REQUIRED;AllowPublicKeyRetrieval=True;"},"AllowedHosts": "*"
}

 ②在Program.cs文件中配置DbContext以使用MySQL作为数据库提供者,注册,配置服务

builder.Services.AddDbContext<efceshidbcontext>(options =>
options.UseMySql(builder.Configuration.GetConnectionString("MySqlConnection"),
ServerVersion.AutoDetect(builder.Configuration.GetConnectionString("MySqlConnection"))));

 ③建立一个表的模型类

 

[Table("user")]
public class user
{public int Id { get; set; }public string Name { get; set; }public string Email { get; set; }public string Password { get; set; }[MaxLength(11)]public string Phone { get; set; }public string Address { get; set; }public DateTime AddTime { get; set; }public int Age { get; set; }}

④添加一个继承自 DbContext 的类,用于配置和管理与数据库的交互。

public class efceshidbcontext : DbContext
{//这是一个 DbSet 属性,代表数据库中的一个表(集合)。  public DbSet<user> User { get; set; } = null;// DbContextOptions<efceshidbcontext> 包含了配置 DbContext 所需的所有选项,比如连接字符串、数据库提供程序等。  // 这些选项通常是在 Startup.cs 的 ConfigureServices 方法中通过 AddDbContext 扩展方法来配置的。  // :base(options) 表示调用基类 DbContext 的构造函数,并将 options 传递给它。 public efceshidbcontext(DbContextOptions<efceshidbcontext> options) : base(options) { }// 这是 DbContext 的一个虚方法,用于在模型创建时自定义模型配置。  // 比如,你可以在这里定义表名、列名、索引、关系等。  protected override void OnModelCreating(ModelBuilder modelBuilder){// 调用基类的 OnModelCreating 方法,以保持默认的模型配置。  base.OnModelCreating(modelBuilder);// 在这里,你可以添加自定义的模型配置代码。  // 例如:modelBuilder.Entity<user>().ToTable("user"); // 将 user 实体映射到 "Users" 表  }
}

 

⑤使用EF Core完成一个简单的分页接口

 

[HttpGet]
[Route("api/Pagination")]
//传入页数
public IActionResult fenye(int pageNumber)
{if (pageNumber > 0)//pageNumber必须大于0{                 // 定义一个常量 pageSize,表示每页显示的用户数量,这里设置为2  const int pageSize = 2;// 计算需要跳过的记录数,即 (页码 - 1) * 每页大小  int skip = (pageNumber - 1) * pageSize;// 从 _context.User 集合中跳过指定数量的记录,并取 pageSize 数量的记录  // _context.User 应该是 DbSet<User> 类型的属性,代表数据库中的 User 表  // Skip 和 Take 是 Entity Framework Core 提供的扩展方法,用于实现分页  var users = _context.User.Skip(skip).Take(pageSize).ToList(); // 将查询结果转换为 List<User> 类型的集合  // 直接返回用户列表,ASP.NET Core 将自动将其序列化为 JSON  return Ok(users);}return Ok("");
}

效果:

二、Dapper

需要引入Dapper包

①在Program.cs中把sql连接传入DapperHelper类

new DapperHelper(builder.Configuration.GetConnectionString("MySqlConnection"));

②创建一个DapperHelper类,实现增删改成方法(包括异步)

public class DapperHelper
{private static string _conn;public DapperHelper(string configuration){_conn = configuration;}/// <summary>/// 执行非查询操作(增删改)  /// </summary>/// <param name="sql"></param>/// <param name="param"></param>/// <returns></returns>public static int Execute(string sql, object param = null){using var connection = new MySqlConnection(_conn); // 假设_connectionString是一个有效的连接字符串  connection.Open();// 现在调用Dapper的Execute方法,并传递非可为空的CommandType  return connection.Execute(sql, param);}/// <summary>/// 异步执行非查询操作(增删改)  /// </summary>/// <param name="sql"></param>/// <param name="param"></param>/// <returns></returns>public static async Task<int> ExecuteAsync(string sql, object param = null){using var connection = new MySqlConnection(_conn); // 根据您的数据库选择连接类  await connection.OpenAsync();return await connection.ExecuteAsync(sql, param);}/// <summary>/// 执行查询操作并返回单个对象  /// </summary>/// <typeparam name="T"></typeparam>/// <param name="sql"></param>/// <param name="param"></param>/// <returns></returns>public static T QuerySingle<T>(string sql, object param = null){using var connection = new MySqlConnection(_conn); // 根据您的数据库选择连接类  connection.Open();return connection.QuerySingle<T>(sql, param);}/// <summary>/// 异步执行查询操作并返回单个对象  /// </summary>/// <typeparam name="T"></typeparam>/// <param name="sql"></param>/// <param name="param"></param>/// <returns></returns>public static async Task<T> QuerySingleAsync<T>(string sql, object param = null){using var connection = new MySqlConnection(_conn); // 根据您的数据库选择连接类  await connection.OpenAsync();return await connection.QuerySingleAsync<T>(sql, param);}/// <summary>///  执行查询操作并返回对象列表  /// </summary>/// <typeparam name="T"></typeparam>/// <param name="sql"></param>/// <param name="param"></param>/// <returns></returns>public static IEnumerable<T> Query<T>(string sql, object param = null){using var connection = new MySqlConnection(_conn); // 根据您的数据库选择连接类  connection.Open();return connection.Query<T>(sql, param);}/// <summary>///   异步执行查询操作并返回对象列表  /// </summary>/// <typeparam name="T"></typeparam>/// <param name="sql"></param>/// <param name="param"></param>/// <returns></returns>public static async Task<IEnumerable<T>> QueryAsync<T>(string sql, object param = null){using var connection = new MySqlConnection(_conn); // 根据您的数据库选择连接类  await connection.OpenAsync();return await connection.QueryAsync<T>(sql, param);}
}

③使用DapperHelper类

[HttpGet]
[Route("/api/Dapper")]
public IActionResult Dapper()
{//返回数据列表IEnumerable<user> a = DapperHelper.Query<user>("select * from user");//异步返回数据列表Task<IEnumerable<user>> asynca = DapperHelper.QueryAsync<user>("select * from user");//返回单个数据user b = DapperHelper.QuerySingle<user>("select * from user where Id=@Id", new { Id = 1 });//异步返回单个数据Task<user> asyncb = DapperHelper.QuerySingleAsync<user>("select * from where Id=@Id", new { Id = 2 });//添加信息DapperHelper.Execute($"insert into user(Name,Email,Password,Phone,Address,AddTime,Age)" +$"values(@Name,@Email,@Password,@Phone,@Address,@AddTime,@Age)", new{Name = "夏婉莹",Email = "352565@qq.com",Password = "1456",Phone = "15659259642",AddTime = DateTime.Now.ToString(),Address = "山东省",Age = 18});// ASP.NET Core 将自动将其序列化为 JSONreturn Ok(new { Data = a });
}

 效果:

这篇关于探索Dapper与EF Core等ORM框架的神器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/992653

相关文章

C++对象布局及多态实现探索之内存布局(整理的很多链接)

本文通过观察对象的内存布局,跟踪函数调用的汇编代码。分析了C++对象内存的布局情况,虚函数的执行方式,以及虚继承,等等 文章链接:http://dev.yesky.com/254/2191254.shtml      论C/C++函数间动态内存的传递 (2005-07-30)   当你涉及到C/C++的核心编程的时候,你会无止境地与内存管理打交道。 文章链接:http://dev.yesky

探索蓝牙协议的奥秘:用ESP32实现高质量蓝牙音频传输

蓝牙(Bluetooth)是一种短距离无线通信技术,广泛应用于各种电子设备之间的数据传输。自1994年由爱立信公司首次提出以来,蓝牙技术已经经历了多个版本的更新和改进。本文将详细介绍蓝牙协议,并通过一个具体的项目——使用ESP32实现蓝牙音频传输,来展示蓝牙协议的实际应用及其优点。 蓝牙协议概述 蓝牙协议栈 蓝牙协议栈是蓝牙技术的核心,定义了蓝牙设备之间如何进行通信。蓝牙协议

探索Elastic Search:强大的开源搜索引擎,详解及使用

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引入 全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选,相信大家多多少少的都听说过它。它可以快速地储存、搜索和分析海量数据。就连维基百科、Stack Overflow、

[分布式网络通讯框架]----Zookeeper客户端基本操作----ls、get、create、set、delete

Zookeeper数据结构 zk客户端常用命令 进入客户端 在bin目录下输入./zkCli.sh 查看根目录下数据ls / 注意:要查看哪一个节点,必须把路径写全 查看节点数据信息 get /第一行代码数据,没有的话表示没有数据 创建节点create /sl 20 /sl为节点的路径,20为节点的数据 注意,不能跨越创建,也就是说,创建sl2的时候,必须确保sl

【服务器08】之【游戏框架】之【加载主角】

首先简单了解一下帧率 FixedUpdate( )   >   Update( )   >   LateUpdate( ) 首先FixedUpdate的设置值 默认一秒运行50次 虽然默认是0.02秒,但FiexedUpdate并不是真的0.02秒调用一次,因为在脚本的生命周期内,FixedUpdate有一个小循环,这个循环也是通过物理时间累计看是不是大于0.02了,然后调用一次。有

Java中的集合框架使用技巧

Java中的集合框架使用技巧 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨Java中集合框架的使用技巧,这些技巧能够帮助我们更高效地处理数据和优化程序性能。 Java集合框架概述 Java集合框架提供了一组实现了各种集合接口的类和接口,用于存储和操作数据。它包括列表、集合、队列和映射等数据结构,能够满足不

[分布式网络通讯框架]----ZooKeeper下载以及Linux环境下安装与单机模式部署(附带每一步截图)

首先进入apache官网 点击中间的see all Projects->Project List菜单项进入页面 找到zookeeper,进入 在Zookeeper主页的顶部点击菜单Project->Releases,进入Zookeeper发布版本信息页面,如下图: 找到需要下载的版本 进行下载既可,这里我已经下载过3.4.10,所以以下使用3.4.10进行演示其他的步骤。

C# 日志框架Serilog使用

1、框架和说明        C#日志框架Serilog支持多种场景输出,简单验证了一下,比较方便        包的安装,推荐直接使用“推荐NuGet包管理器”安装Serilog.AspNetCore,常见的组件都已经集成在一个包中,使用比较方便 2、配置文件        Serilog可以由配置文件来定义行为,而且配置文件的修改即时生效。参考配置文件如下: {"Serilog":

Pytest和Unitest框架对比

在学到自动化的时候,很多同学都遇到了Pytest和Unitest框架,有的人是两个都学,但是学的不精只是知道分别怎么用.不了解两个区别是什么.有的是犹豫到底要学习那个框架.其实要做好自动化测试,是有必要了解不同框架之间的差异化的. Pytest 特点: Pytest采用了更简洁、更灵活的语法风格,使用“assert”语句来进行断言,Pytest可以自动发现并执行以“test_”开头的函数

mysql-mmm框架2

简介 MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序。MMM使用Perl语言开发,主要用来监控和管理MySQL Master-Master(双主)复制,虽然叫做双主复制,但是业务上同一时刻只允许对一个主进行写入,另一台备选主上提供部分读服务,以加速在主主切换时刻备选主的预热,可以说MMM这套脚本程