Entity Framework Core의 정의
대부분의 중요 웹 애플리케이션은 데이터에 대한 CRUD(만들기, 읽기, 업데이트 및 삭제) 작업을 안정적으로 실행해야 합니다. 또한 애플리케이션 재시작 시 이러한 작업으로 인한 변경 내용을 유지해야 합니다. .NET 애플리케이션에서 데이터를 유지하는 다양한 방법이 있지만, EF(Entity Framework) Core가 사용자 친화적이며 수많은 .NET 애플리케이션에 적합한 솔루션입니다.
EF Core 살펴보기
EF Core는 .NET 애플리케이션을 위한 가볍고 확장 가능하며 오픈 소스인, 플랫폼 간 데이터 액세스 기술입니다.
EF Core는 다음과 같은 개체 관계형 매퍼로 사용할 수 있습니다.
- .NET 개발자가 .NET 개체를 통해 데이터베이스를 사용할 수 있도록 합니다.
- 개발자가 일반적으로 작성해야 하는 대부분의 데이터 액세스 코드가 필요하지 않습니다.
EF Core는 SQLite, MySQL, PostgreSQL, Oracle 및 Microsoft SQL Server 같은 수많은 인기 데이터베이스를 지원합니다.
모델
EF Core에서는 데이터 액세스가 모델을 통해 수행됩니다. 모델은 엔터티 클래스 및 데이터베이스와의 세션을 나타내는 컨텍스트 개체로 구성됩니다. 컨텍스트 개체를 사용하여 데이터를 쿼리하고 저장할 수 있습니다.
엔터티 클래스
이 시나리오에서는 피자 매장 관리 API를 구현하므로, Pizza
엔터티 클래스를 사용합니다. 매장의 피자에는 이름과 설명이 있습니다. 또한 API와 데이터베이스에서 그들을 식별할 수 있도록 ID가 필요합니다. 애플리케이션에서 사용하는 Pizza
엔터티 클래스는 다음과 같이 피자를 식별합니다.
namespace PizzaStore.Models
{
public class Pizza
{
public int Id { get; set; }
public string? Name { get; set; }
public string? Description { get; set; }
}
}
컨텍스트 클래스
이 애플리케이션에는 엔터티 클래스가 하나뿐이지만, 대부분의 애플리케이션에는 여러 엔터티 클래스가 있습니다. 컨텍스트 클래스는 엔터티 클래스에 데이터를 쿼리 및 저장하고, 데이터베이스 연결을 만들고 관리하는 역할을 합니다.
EF Core를 사용하여 CRUD 작업 수행
EF Core가 구성된 후 이를 사용하여 엔터티 클래스에서 CRUD 작업을 수행할 수 있습니다. 그런 다음에는 C# 클래스를 대상으로 개발하여 데이터베이스 작업을 컨텍스트 클래스에 위임할 수 있습니다. 데이터베이스 공급자는 다시 이를 데이터베이스별 쿼리 언어로 변환합니다. 예를 들어, 관계형 데이터베이스용 SQL이 있습니다. 결과에 반환된 엔터티가 컨텍스트에 이미 있다 하더라도, 쿼리는 항상 데이터베이스를 대상으로 실행됩니다.
쿼리 데이터
컨텍스트 개체는 각 엔터티 형식에 대한 컬렉션 클래스를 노출합니다. 이전 예제에서 컨텍스트 클래스는 Pizza
개체의 컬렉션을 Pizzas
로 노출합니다. 컨텍스트 클래스의 인스턴스가 있으니 데이터베이스에서 모든 피자를 쿼리할 수 있습니다.
var pizzas = await db.Pizzas.ToListAsync();
데이터 삽입
동일한 컨텍스트 개체를 사용하여 새 피자를 삽입할 수 있습니다.
await db.pizzas.AddAsync(
new Pizza { ID = 1, Name = "Pepperoni", Description = "The classic pepperoni pizza" });
데이터 삭제
삭제 작업은 간단합니다. 삭제할 항목의 ID만 있으면 됩니다.
var pizza = await db.pizzas.FindAsync(id);
if (pizza is null)
{
//Handle error
}
db.pizzas.Remove(pizza);
데이터 업데이트
비슷한 방법으로 기존 피자를 업데이트할 수도 있습니다.
int id = 1;
var updatepizza = new Pizza { Name = "Pineapple", Description = "Ummmm?" };
var pizza = await db.pizzas.FindAsync(id);
if (pizza is null)
{
//Handle error
}
pizza.Description = updatepizza.Description;
pizza.Name = updatepizza.Name;
await db.SaveChangesAsync();
EF Core 메모리 내 데이터베이스 사용
EF Core에는 애플리케이션을 테스트하는 데 사용하는 메모리 내 데이터베이스 공급자가 포함되어 있습니다. 메모리 내 데이터베이스 공급자는 테스트와 개발에 유용하지만 프로덕션에서는 사용하면 안 됩니다. 다음 단원에서는 메모리 내 데이터베이스 공급자를 사용하여 데이터베이스를 만들고 이 데이터베이스에서 CRUD 작업을 수행합니다.