asp.net core 系列之webapi集成Dapper的簡單操作教程

来源:https://www.cnblogs.com/Vincent-yuan/archive/2019/04/27/10778145.html
-Advertisement-
Play Games

Dapper也是是一種ORM框架 這裡記錄下,使用ASP.NET 集成 Dapper 的過程,方便自己查看 至於Dapper的特性以及操作可以參考Dapper官方文檔 1.創建資料庫相關 在Sql Server 創建一個叫做 DapperDemo 的資料庫 再創建一個叫做 Products 的表 腳 ...


Dapper也是是一種ORM框架

這裡記錄下,使用ASP.NET 集成 Dapper 的過程,方便自己查看

至於Dapper的特性以及操作可以參考Dapper官方文檔

 

1.創建資料庫相關

  • 在Sql Server 創建一個叫做 DapperDemo 的資料庫
  • 再創建一個叫做 Products 的表

腳本如下

CREATE TABLE [dbo].[Products](
    [ProductID] [int] IDENTITY(1,1) 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類

代碼如下

 1 public class ProductRepository
 2 {
 3     private string connectionString;
 4     public ProductRepository()
 5     {
 6         connectionString = @"Server=localhost;Database=DapperDemo;Trusted_Connection=true;";
 7     }
 8  
 9     public IDbConnection Connection
10     {
11         get  {
12             return new SqlConnection(connectionString);
13         }
14     }
15  
16     public void Add(Product prod)
17     {
18         using (IDbConnection dbConnection = Connection)
19         {
20             string sQuery = "INSERT INTO Products (Name, Quantity, Price)"
21                             + " VALUES(@Name, @Quantity, @Price)";
22             dbConnection.Open();
23             dbConnection.Execute(sQuery, prod);
24         }
25     }
26  
27     public IEnumerable<Product> GetAll()
28     {
29         using (IDbConnection dbConnection = Connection)
30         {
31             dbConnection.Open();
32             return dbConnection.Query<Product>("SELECT * FROM Products");
33         }
34     }
35  
36     public Product GetByID(int id)
37     {
38         using (IDbConnection dbConnection = Connection)
39         {
40             string sQuery = "SELECT * FROM Products"
41                            + " WHERE ProductId = @Id";
42             dbConnection.Open();
43             return dbConnection.Query<Product>(sQuery, new { Id = id }).FirstOrDefault();
44         }
45     }
46  
47     public void Delete(int id)
48     {
49         using (IDbConnection dbConnection = Connection)
50         {
51              string sQuery = "DELETE FROM Products"
52                           + " WHERE ProductId = @Id";
53             dbConnection.Open();
54             dbConnection.Execute(sQuery, new { Id = id });
55         }
56     }
57  
58     public void Update(Product prod)
59     {
60         using (IDbConnection dbConnection = Connection)
61         {
62             string sQuery = "UPDATE Products SET Name = @Name,"
63                            + " Quantity = @Quantity, Price= @Price"
64                            + " WHERE ProductId = @ProductId";
65             dbConnection.Open();
66             dbConnection.Query(sQuery, prod);
67         }
68     }
69 }

 

這裡的連接字元串是直接寫在代碼里的,可以根據需要自己調整

 

6.創建Controller

  • 創建一個名為 ProductController 的類

代碼如下

 1 [Route("api/[controller]")]
 2 public class ProductController : Controller
 3 {
 4     private readonly ProductRepository productRepository;
 5     public ProductController()
 6     {
 7         productRepository = new ProductRepository();
 8     }
 9     // GET: api/values
10     [HttpGet]
11     public IEnumerable<Product> Get()
12     {
13         return productRepository.GetAll();
14     }
15  
16     // GET api/values/5
17     [HttpGet("{id}")]
18     public Product Get(int id)
19     {
20         return productRepository.GetByID(id);
21     }
22  
23     // POST api/values
24     [HttpPost]
25     public void Post([FromBody]Product prod)
26     {
27         if (ModelState.IsValid)
28             productRepository.Add(prod);
29     }
30  
31     // PUT api/values/5
32     [HttpPut("{id}")]
33     public void Put(int id, [FromBody]Product prod)
34     {
35         prod.ProductId = id;
36         if (ModelState.IsValid)
37             productRepository.Update(prod);
38     }
39  
40     // DELETE api/values/5
41     [HttpDelete("{id}")]
42     public void Delete(int id)
43     {
44         productRepository.Delete(id);
45     }
46 }

 

7.運行,驗證是否成功

在這之前,可以手動往資料庫表裡加幾條數據,我這裡沒有加,只是在Get方法里打了個斷點

在瀏覽器中輸入 https://localhost:44315/api/product

 

 因為我資料庫里沒有數據,這裡返回的空的

 

這裡做記錄方便查看,如有錯誤,歡迎指正

參考網址:

https://www.talkingdotnet.com/use-dapper-orm-with-asp-net-core/

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 在.Net程式開發過程中,我們經常會遇到如下場景: 編寫WinForm程式客戶端,需要查詢資料庫獲取數據,於是我們根據需求寫好了代碼後,點擊查詢,發現界面卡死,無法響應。經過調試,發現查詢資料庫這一步執行了很久,在此過程中,UI被阻塞,無法響應任何操作。 如何解決此問題?我們需要分析問題成因: ...
  • 1、HttpRuntime.Cache 相當於就是一個緩存具體實現類,這個類雖然被放在了 System.Web 命名空間下了。但是非 Web 應用也是可以拿來用的。 2、HttpContext.Cache 是對上述緩存類的封裝,由於封裝到了 HttpContext ,局限於只能在知道 HttpCon ...
  • Action與Func是APS.NET內置委托 // 無返回值的委托Action Action是無返回值的泛型委托 Action 表示無參,無返回值的委托 Action<int,string> 表示有傳入參數int,string無返回值的委托 Action<int,string,bool> 表示有傳 ...
  • 通用架構是所謂的聯合網關。在此方法中,IdentityServer充當一個或多個外部身份提供商的網關。 該架構具有以下優點: 您的應用程式只需要瞭解一個令牌服務(網關),並且屏蔽了有關連接到外部提供程式的所有詳細信息。這也意味著您可以添加或更改這些外部提供程式,而無需更新您的應用程式。 您控制網關( ...
  • 小地圖的基本概念眾所周知,小地圖(或雷達)是用於顯示周圍環境信息的。首先,小地圖是以主角為中心的。其次,小地圖上應該用圖標來代替真實的人物模型,因為小地圖通常很小,玩家可能無法看清真實的模型。大多數小地圖都是圓形的,所以本文也將創建圓形小地圖。通常小地圖周圍還會有一些按鈕和標簽,本文也會介紹。 創建 ...
  • 聯合註銷是指用戶使用外部身份提供程式登錄IdentityServer,然後用戶通過IdentityServer未知的工作流程註銷該外部身份提供程式的情況。當用戶註銷時,對IdentityServer進行通知將非常有用,這樣它就可以將用戶從IdentityServer和使用IdentityServer ...
  • 當用戶 "註銷" IdentityServer並且他們使用 "外部身份提供程式" 登錄時,可能會將其重定向到註銷外部提供程式。並非所有外部提供商都支持註銷,因為它取決於它們支持的協議和功能。 要檢測是否必須將用戶重定向到外部身份提供程式以進行註銷通常是通過使用 在IdentityServer中發佈到 ...
  • 大量數據導入操作, 也就是直接將DataTable里的內容寫入到資料庫 通用方法: 拼接Insert語句, 好土鱉 1. MS Sql Server: 使用SqlBulkCopy 2. MySql: adapter.update()批量更新 MySqlBulkLoader, 這個是從文件裡邊到的, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...