- asp.net core swagger
- Mac Oracle
- javascript redirection
- simpe ftp
- asp.net Select
- TempData
- django 엑셀불러오기
- 바코드 생성하기
- 원격ftp
- 404에러페이지
- swagger 500 error
- asp.net core Select
- asp.net dropdownlist
- 타임피커
- ViewData
- 하드 윈도우 복사
- asp ftp
- XSS방어
- ViewBag
- 하드 마이그레이션
- XSS PHP
- 맥 오라클설치
- 말줄임표시
- ASP.Net Core 404
- 강제이동
- SSD 복사
- JavaScript
- javascript 바코드 생성
- jquery 바코드생성
- php 캐쉬제거
웹개발자의 기지개
[ASP.Net Core] EF 에서 Include 와 ThenInclude 사용하기 본문
ORM Entity Framework 에서 Include / ThenInclude 사용법을 몇가지 정리해 본다.
|
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
|
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public List<ProductOption> Options { get; set; }
}
public class ProductOption
{
public int Id { get; set; }
public string OptionName { get; set; }
public int ProductId { get; set; }
public Product Product { get; set; }
public List<ProductOptionValue> Values { get; set; }
}
public class ProductOptionValue
{
public int Id { get; set; }
public string ValueName { get; set; }
public int ProductOptionId { get; set; }
public ProductOption ProductOption { get; set; }
}
|
cs |
상품
└─ 옵션들
└─ 옵션값들
Product
└── ProductOption
└── ProductOptionValue
티셔츠
├─ 색상
│ ├─ 빨강
│ ├─ 파랑
│ └─ 검정
└─ 사이즈
├─ S
├─ M
└─ L
var products = db.Products
.Include(p => p.Options)
.ToList();
Product
└── Options
var products = db.Products
.Include(p => p.Options)
.ThenInclude(o => o.Values)
.ToList();
Product
└── Options
└── Values
var product = db.Products
.Include(p => p.Options)
.FirstOrDefault(p => p.Id == 1);
가져오는 데이터:
상품명: 티셔츠
옵션:
- 색상
- 사이즈
하지만 옵션값은 없습니다.
색상 안의 빨강, 파랑, 검정
사이즈 안의 S, M, L
var product = db.Products
.Include(p => p.Options)
.ThenInclude(o => o.Values)
.FirstOrDefault(p => p.Id == 1);
상품명: 티셔츠
옵션:
- 색상
- 빨강
- 파랑
- 검정
- 사이즈
- S
- M
- L
예제1)
var product = db.Products
.Include(p => p.Options)
.ThenInclude(o => o.Values)
.FirstOrDefault(p => p.Id == id);
Razor View에서:
<h2>@Model.Name</h2>
@foreach (var option in Model.Options)
{
<h4>@option.OptionName</h4>
<ul>
@foreach (var value in option.Values)
{
<li>@value.ValueName</li>
}
</ul>
}
출력:
티셔츠
색상
- 빨강
- 파랑
- 검정
사이즈
- S
- M
- L
-----------------
|
1
2
3
4
5
6
7
8
|
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public List<ProductOption> Options { get; set; }
public List<ProductImage> Images { get; set; }
}
|
cs |
var products = db.Products
.Include(p => p.Options)
.Include(p => p.Images)
.ToList();
Product
├── Options
└── Images
여러 단계로 내려가 있는 경우 (주문하기)
Order
└── OrderItems
└── Product
└── Category
var orders = db.Orders
.Include(o => o.OrderItems)
.ThenInclude(oi => oi.Product)
.ThenInclude(p => p.Category)
.ToList();
주문을 가져오고
└─ 주문상세를 가져오고
└─ 상품을 가져오고
└─ 상품 카테고리까지 가져온다
Include 현재 엔티티의 직접 연결 데이터를 가져옴
ThenInclude Include로 가져온 데이터의 하위 데이터를 가져옴
------------------
var product = db.Products
.Include(p => p.Options)
.ThenInclude(o => o.Values)
.Include(p => p.Images)
.Include(p => p.Category)
.FirstOrDefault(p => p.Id == id);
상품 1개를 가져오면서
- 옵션
- 옵션값
- 이미지
- 카테고리
를 함께 가져온다
--------------
Include를 너무 많이 쓰면 SQL JOIN이 많아져서 성능이 떨어질 수 있습니다.
db.Products
.Include(p => p.Options)
.ThenInclude(o => o.Values)
.Include(p => p.Images)
.Include(p => p.Reviews)
.Include(p => p.Orders)
.ToList();
이 코드는 다음과 같이 일부 코드로 줄여서,
성능을 개선할 수 있습니다.
var products = db.Products
.Select(p => new
{
p.Id,
p.Name,
Options = p.Options.Select(o => new
{
o.OptionName,
Values = o.Values.Select(v => v.ValueName)
})
})
.ToList();
'ASP.NET > ASP.NET Core' 카테고리의 다른 글
| [ASP.NET Core] 게시오류 - System.AggregateException: 하나 이상의 오류가 발생했습니다. Microsoft.WebTools.Shared.Exceptions.WebToolsException: 빌드하지 못했습니다. (0) | 2026.06.17 |
|---|---|
| [ASP.NET Core] ?? 연산자, 'null 이면' 사용하기 (0) | 2026.06.03 |
| [ASP.NET Core] .NET 10 Web API 공부 (0) | 2026.01.26 |
| [ASP.Net Core] dotnet 버전 정보 확인 (0) | 2025.03.12 |
| [ASP.Net Core] Swagger Errors - Failed to load API definition. 500번 error (0) | 2025.03.12 |
