일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- MS-SQL
- HTML
- 플러터
- Flutter
- React JS
- 함수
- 닷넷
- 자바스크립트
- GitHub
- MVVM
- AnimationController
- db
- 리엑트
- listview
- Maui
- 마우이
- 애니메이션
- MSSQL
- typescript
- 파이어베이스
- Binding
- 바인딩
- 오류
- spring boot
- .NET
- 깃허브
- Animation
- JavaScript
- page
- Firebase
Archives
- Today
- Total
개발노트
6. [ASP .NET Core] Dapper 본문
반응형
Dapper 는 .NET에서 사용되는 ORM 으로 이를 이용하면 좀 더 편하게 DB 작업이 가능하다.
- Dapper는 DB에서 반환되는 테이블을 이용하여 객체와 맵핑이 가능하다.
- TableValueParameter 사용으로 DB에 정의된 TVP를 매개변수로 이용가능하다.
- 반환되는 테이블의 수가 여러개라면 QueryMultiple 로 처리가능하다.
- ORM 이 외에도 저장 프로시저, 쿼리 다 사용가능하다.
- SplitOn 을 사용하여 Join 결과를 "Column1, Column2"와 같이 구분자를 지정, 이를 기준으로 여러개의 객체로 나누어 맵핑이 가능하다. (이를 통해 Json Depth 맵핑가능)
예시)
1. Dapper로 TVP 사용하기(AsTableValuedParameter)
using Dapper;
using System;
using System.Data.SqlClient;
using System.Data;
public class Example
{
public void InsertMultipleData()
{
string connectionString = "your_connection_string_here";
using (var connection = new SqlConnection(connectionString))
{
// TVP 데이터 생성
var tableVal = new DataTable();
tableVal.Columns.Add("Id", typeof(int));
tableVal.Columns.Add("Name", typeof(string));
tableVal.Rows.Add(1, "John");
tableVal.Rows.Add(2, "Jane");
// TVP 파라미터로 호출
var param = new { MyTableType = tableVal.AsTableValuedParameter("dbo.MyTableType") };
// TVP를 이용한 저장 프로시저 호출
connection.Execute("dbo.InsertMyData", param, commandType: CommandType.StoredProcedure);
}
}
}
2.Dapper로 2개 이상의 반환 테이블 받아오기 (QueryMultiple)
public void GetMultipleResults()
{
using (var connection = new SqlConnection("your_connection_string_here"))
{
var query = @"
SELECT Id, Name FROM Users;
SELECT OrderId, ProductName FROM Orders;
";
var multi = connection.QueryMultiple(query);
var users = multi.Read<User>().ToList();
var orders = multi.Read<Order>().ToList();
Console.WriteLine("Users:");
foreach (var user in users)
{
Console.WriteLine($"{user.Id} - {user.Name}");
}
Console.WriteLine("Orders:");
foreach (var order in orders)
{
Console.WriteLine($"{order.OrderId} - {order.ProductName}");
}
}
}
3. Join된 반환 결과를 객체를 나누어 객체에 맵핑 (Json Depth 고려 객체 안에 List 추가)
public void GetJoinedData()
{
using (var connection = new SqlConnection("your_connection_string_here"))
{
var query = @"
SELECT u.Id, u.Name, o.OrderId, o.ProductName
FROM Users u
JOIN Orders o ON u.Id = o.UserId
";
var result = connection.Query<User, Order, User>(
query,
(user, order) =>
{
user.Orders = user.Orders ?? new List<Order>();
user.Orders.Add(order);
return user;
},
splitOn: "OrderId"
).ToList();
foreach (var user in result)
{
Console.WriteLine($"{user.Name}'s Orders:");
foreach (var order in user.Orders)
{
Console.WriteLine($"Order: {order.ProductName}");
}
}
}
}
반응형
'서버 개발 > ASP .NET Core' 카테고리의 다른 글
7. [ASP .NET Core] HttpClient 올바르게 사용하기 (0) | 2025.02.03 |
---|---|
5. [ASP .NET Core] IList 사용하기 (0) | 2024.11.17 |
4. [ASP .NET Core] 의존성 역전 원칙 (DIP) (1) | 2024.11.17 |
3. [ASP .NET Core] 의존성 주입(DI), IoC 란 무엇인가? (with Simple Injector) (0) | 2024.11.17 |
2. [ASP .NET Core] 간단 API 만들기(with Dapper) (0) | 2024.11.10 |
Comments