asp.net core 系列之webapi集成Dapper的简单操作教程
Dapper也是是一种ORM框架
这里记录下,使用ASP.NET 集成 Dapper 的过程,方便自己查看
至于Dapper的特性以及操作可以参考Dapper官方文档
1.创建数据库相关
- 在Sql Server 创建一个叫做 DapperDemo 的数据库
- 再创建一个叫做 Products 的表
脚本如下
CREATE TABLE [dbo].[Products](
[ProductID] [int] IDENTITY(,) NOT NULL,
[Name] [nvarchar](max) NULL,
[Quantity] [int] NULL,
[Price] [float] NULL,
CONSTRAINT [PK_Products] PRIMARY KEY CLUSTERED
(
[ProductID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO
2.创建一个ASP.NET Web Api 项目
- 文件->新建->项目
- 选择 ASP.NET Core Web 应用 的模板,项目名 DapperDemo
- 在新的 ASP.NET Core Web 应用的页面,选择 API 模板,并确定,不要选择支持Docker
3.增加model实体
- 右击项目,新增一个Models文件夹
- 在Models文件夹下增加一个类(class),Product
public class Product
{
[Key]
public int ProductId { get; set; }
public string Name { get; set; }
public int Quantity { get; set; }
public double Price { get; set; }
}
4.引入Dapper NuGet包
- 工具->NuGet 包管理器 -> 管理解决方案的 Nuget 包程序包
- 搜索Dapper ,并且安装
如下,安装
也可以使用 程序包管理器控制台 进行安装
Install-Package Dapper
5.使用Dapper
Dapper的使用需要下面三步:
- 使用连接字符串( connection string )创建一个 IDBConnection 对象
- 编写你自己的sql 语句
- 把 sql 语句传给 dapper
所以,操作如下
- 创建一个Repository文件夹
- 在Repository文件夹里增加一个名为 ProductRepository 的class类
代码如下
public class ProductRepository
{
private string connectionString;
public ProductRepository()
{
connectionString = @"Server=localhost;Database=DapperDemo;Trusted_Connection=true;";
} public IDbConnection Connection
{
get {
return new SqlConnection(connectionString);
}
} public void Add(Product prod)
{
using (IDbConnection dbConnection = Connection)
{
string sQuery = "INSERT INTO Products (Name, Quantity, Price)"
+ " VALUES(@Name, @Quantity, @Price)";
dbConnection.Open();
dbConnection.Execute(sQuery, prod);
}
} public IEnumerable<Product> GetAll()
{
using (IDbConnection dbConnection = Connection)
{
dbConnection.Open();
return dbConnection.Query<Product>("SELECT * FROM Products");
}
} public Product GetByID(int id)
{
using (IDbConnection dbConnection = Connection)
{
string sQuery = "SELECT * FROM Products"
+ " WHERE ProductId = @Id";
dbConnection.Open();
return dbConnection.Query<Product>(sQuery, new { Id = id }).FirstOrDefault();
}
} public void Delete(int id)
{
using (IDbConnection dbConnection = Connection)
{
string sQuery = "DELETE FROM Products"
+ " WHERE ProductId = @Id";
dbConnection.Open();
dbConnection.Execute(sQuery, new { Id = id });
}
} public void Update(Product prod)
{
using (IDbConnection dbConnection = Connection)
{
string sQuery = "UPDATE Products SET Name = @Name,"
+ " Quantity = @Quantity, Price= @Price"
+ " WHERE ProductId = @ProductId";
dbConnection.Open();
dbConnection.Query(sQuery, prod);
}
}
}
这里的连接字符串是直接写在代码里的,可以根据需要自己调整
6.创建Controller
- 创建一个名为 ProductController 的类
代码如下
[Route("api/[controller]")]
public class ProductController : Controller
{
private readonly ProductRepository productRepository;
public ProductController()
{
productRepository = new ProductRepository();
}
// GET: api/values
[HttpGet]
public IEnumerable<Product> Get()
{
return productRepository.GetAll();
} // GET api/values/5
[HttpGet("{id}")]
public Product Get(int id)
{
return productRepository.GetByID(id);
} // POST api/values
[HttpPost]
public void Post([FromBody]Product prod)
{
if (ModelState.IsValid)
productRepository.Add(prod);
} // PUT api/values/5
[HttpPut("{id}")]
public void Put(int id, [FromBody]Product prod)
{
prod.ProductId = id;
if (ModelState.IsValid)
productRepository.Update(prod);
} // DELETE api/values/5
[HttpDelete("{id}")]
public void Delete(int id)
{
productRepository.Delete(id);
}
}
7.运行,验证是否成功
在这之前,可以手动往数据库表里加几条数据,我这里没有加,只是在Get方法里打了个断点
在浏览器中输入 https://localhost:44315/api/product
因为我数据库里没有数据,这里返回的空的
这里做记录方便查看,如有错误,欢迎指正
参考网址:
https://www.talkingdotnet.com/use-dapper-orm-with-asp-net-core/
asp.net core 系列之webapi集成Dapper的简单操作教程的更多相关文章
- asp.net core 系列之webapi集成EFCore的简单操作教程
因为官网asp.net core webapi教程部分,给出的是使用内存中的数据即 UseInMemoryDatabase 的方式, 这里记录一下,使用SQL Server数据库的方式即 UseSql ...
- asp.net core系列 38 WebAPI 返回类型与响应格式--必备
一.返回类型 ASP.NET Core 提供以下 Web API Action方法返回类型选项,以及说明每种返回类型的最佳适用情况: (1) 固定类型 (2) IActionResult (3) Ac ...
- asp.net core 2.0 webapi集成signalr
asp.net core 2.0 webapi集成signalr 在博客园也很多年了,一直未曾分享过什么东西,也没有写过博客,但自己也是汲取着博客园的知识成长的: 这两天想着不能这么无私,最近.N ...
- asp.net core系列 36 WebAPI 搭建详细示例
一.概述 HTTP不仅仅用于提供网页.HTTP也是构建公开服务和数据的API强大平台.HTTP简单灵活且无处不在.几乎任何你能想到的平台都有一个HTTP库,因此HTTP服务可以覆盖广泛的客户端,包括浏 ...
- asp.net core系列 37 WebAPI 使用OpenAPI (swagger)中间件
一.概述 在使用Web API时,对于开发人员来说,了解其各种方法可能是一项挑战.在ASP.NET Core上,Web api 辅助工具介绍二个中间件,包括:Swashbuckle和NSwag .NE ...
- asp.net core系列 77 webapi响应压缩
一.介绍 背景:目前在开发一个爬虫框架,使用了.net core webapi接口作为爬虫调用入口,在调用 webapi时发现爬虫耗时很短(1秒左右),但客户端获取响应时间却在3~4秒.对于这个问题考 ...
- asp.net core系列 61 Ocelot 构建服务发现简单示例
一.概述 Ocelot允许指定服务发现提供程序,如Consul或Eureka. 这二个中间件是用来实现:服务治理或秒服务发现,服务发现查找Ocelot正在转发请求的下游服务的主机和端口.目前Ocelo ...
- asp.net core系列 WebAPI 作者:懒懒的程序员一枚
asp.net core系列 36 WebAPI 搭建详细示例一.概述1.1 创建web项目1.2 添加模型类1.3 添加数据库上下文1.4 注册上下文1.5 添加控制器1.6 添加Get方法1.7 ...
- 【目录】asp.net core系列篇
随笔分类 - asp.net core系列篇 asp.net core系列 68 Filter管道过滤器 摘要: 一.概述 本篇详细了解一下asp.net core filters,filter叫&q ...
随机推荐
- 函数上下文this
一般来说谁调用上下文都指向谁,具体有以下几种情况: 1.函数用圆括号调用,函数的上下文是window 注意:所有的全局变量都是window的属性,而函数里边定义的变量谁的属性也不是. 2.函数作为对象 ...
- JavaScript中的trim自定义
先直接贴代码 String.prototype.trimfy=function (val){ var demo=String(this); if(demo.indexOf(val)>=0){ i ...
- Selenium2Lib库之操作浏览器相关的关键字实战
1.1 操作浏览器相关的关键字 Selenium2Lib提供了与浏览器交互的关键词 1.1.1 Open Browser关键字 按F5 查看Open Browser关键字的说明,如下图: Open ...
- Ubuntu 16.04 安装 Docker
在Ubuntu上安装Docker, 非常简单, 我测试过 16.04, 17.04, 以及最新版 18.04,都是可以成功安装,并使用的. 第一步: 启动root账号 第二步: 配置网络,能上网 ...
- DataFrame
DataFrame是一个表格型的数据结构,含有一组有序的列,每列可以是不同的值类型(数值.字符串.布尔值等),DataFrame就行索引也有列索引,可以被看做由Series组成的字典(共用同一个索引) ...
- [Kali_Metasploit]db_connect创建连接时无法连接的解决方案
问题1复现路径: postgresql selected, no connection 第一步: db_connect postgres:toor@127.0.0.1/msfbook 连接成功不需要进 ...
- java客户端调用webService
啥也不想说,以前使用的方法突然不行了.各种网搜(记得别忘记到jar包哦:axis.jar) 看代码,第一种方式,也就是以前的方式: 改方式不用表名参数名称 public static String i ...
- 数组、ArrayList、List、LinkedList的区别
一.数组 数组在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元素也很简单. 1.一维数组 声明一个数组: ]; 初始化一个数组: ] { , , , , }; //定长 声明并初始化: ...
- 【redis 基础学习】(六)Redis HyperLogLog
摘自:http://www.mayou18.com/detail/o6M0v9mi.html Redis HyperLogLog 结构讲解 Redis 在 2.8.9 版本添加了 HyperLogL ...
- 二十一、Hadoop学记笔记————kafka的初识
这些场景的共同点就是数据由上层框架产生,需要由下层框架计算,其中间层就需要有一个消息队列传输系统 Apache flume系统,用于日志收集 Apache storm系统,用于实时数据处理 Spark ...