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/

最新文章

  1. C#-WebForm-简单控件
  2. 景瑞地产商业智能BI整体实施过程
  3. linux命令每日一练习-top free
  4. python_way.day7 模块(configparser,xml,shutil,subprocess)、面向对象(上)(创建类,类的构成,函数式编程与面向对象编程的选择,类的继承)
  5. commonJS — 数组操作(for Array)
  6. 【转发】Linux下清除系统日志方法
  7. Redis - 密码配置和主从复制
  8. python常用正则表达式
  9. checkbox的选中、全选、返选、获取所有选中的值、所有的值、单选全部时父选中
  10. 2018-2019-2 实验一 Java开发环境的熟悉
  11. Java常见runtime exception
  12. 001_IntelliJ IDEA详细安装步骤
  13. 几个方便的nodejs 任务调度框架
  14. List&lt;Map&lt;String, String&gt;&gt;和Map&lt;String, List&lt;String&gt;&gt;遍历
  15. 浏览器缩放导致的样式bug
  16. CanOpen协议【CanFestival】移植方法 支持VC、QT、STM32
  17. Unity3d-Particle System系统的学习(三)
  18. [sz,rz]使用sz/rz在两台Linux设备之间传输数据
  19. import_tasks: tasks/sometasks.yml
  20. 如何实现本机Windows连接虚拟机中的CentOS

热门文章

  1. rsync 密钥文件错误问题总结
  2. IAAS-虚拟化技术组件介绍
  3. CDH简易离线部署文档
  4. Generator的正确打开方式
  5. 【转】关于Sentry
  6. 关于js中循环遍历中顺序执行多个嵌套ajax的问题
  7. JAVA远程通信的几种选择(RPC,Webservice,RMI,JMS的区别)
  8. SSM-SpringMVC-03:SpringMVC执行流程一张有意思的图
  9. SSM-MyBatis-13:Mybatis中多条件查询
  10. 使用SimHash进行海量文本去重[转载]