본문 바로가기

백엔드/닷넷

시퀄라이트 사용하기 - 코드 우선 방식

반응형

.NET은 데이터베이스를 생성할 때 작성된 코드를 통해 데이터베이스를 생성하는 Code first (코드우선) 방식과 데이터베이스의 데이터를 바탕으로 코드를 작성하는 data first (데이터 우선) 방식을 제공합니다. 이 글에서는 시퀄라이트를 코드우선방식으로 연결해 보겠습니다.

목차

애플리케이션 생성

먼저 .NET 애플리케이션을 생성합니다.

 

생성하기

 

.NET web-API 생성하기

개발도구 설치하기 .NET을 이용하여 웹애플리케이션을 만들기 위해서는 .NET에서 제공하는 개발도구가 필요합니다. 개발도구 다운로드는 아래 링크에서 가능합니다. .NET | Free. Cross-platform. Open Sour

jin-co.tistory.com

데이터베이스와 연결하기

1. 개체(Entity)를 만들기

개체는 클래스 파일로 모델과 같은 개념입니다. 생성된 개체는 데이터베이스의 테이블에 해당하여 필드를 규정합니다.

먼저, 프로젝트 폴더를 열고 개체를 저장할 폴더를 생성(필수는 아니지만 폴더정리를 위해 만들겠습니다).

생성된 폴더에 열고 C# 클래스 파일을 생성합니다. 

생성된 클래스는 아래와 같은데요.

저장할 데이터의 속성으로 지정합니다.

2. 패키지 설치

데이터베이스와 연결을 위한 설정을 해 줄 패키지가 필요한데요. 검색창에 누겟갤러리를 검색하여 엽니다.

NuGet: Open NuGet Gallery

▶ 설치할 패키지

패키지를 설치할 때 주의할 점은 패키지 버전이 반드시 .NET의 버전과 같아야 한다는 점입니다. 예를 들어 .NET 7의 경우 7.으로 시작하는 패키지를 다운로드하여야 합니다.

Microsoft.EntityFrameworkCore.Sqlite

시퀄라이트 데이터베이스 패키지로 시퀄라이트 사용을 가능하게 해 줍니다. 우측 체크박스를 체크하고 'Install'을 누릅니다.

Microsoft.EntityFrameworkCore.Design

코드 우선 데이터베이스 방식을 사용하기 위해서 필요한 패키지로, 우측 체크박스를 체크하고 'Install'을 누릅니다.

마이그레이션에 필요한 패키지를 설치합니다.

dotnet-ef


※ 해당 패키지 사이트를 방문하여  안내에 따라 콘솔을 사용하는 방법으로 설치도 가능합니다.

NuGet Gallery | dotnet-ef 7.0.2

 

dotnet-ef 7.0.2

Entity Framework Core Tools for the .NET Command-Line Interface. Enables these commonly used dotnet-ef commands: dotnet ef migrations add dotnet ef migrations list dotnet ef migrations script dotnet ef dbcontext info dotnet ef dbcontext scaffold dotnet ef

www.nuget.org


3. Db Context 클래스 생성

먼저, 디비콘텍스트 클래스를 담을 폴더를 생성합니다.

생성된 폴더를 우클릭하여 C# 클래스를 생성합니다.

생성된 클래스 명에 아래와 같이 'DbContext'를 상속받습니다.

using Microsoft.EntityFrameworkCore;

아래와 같이 Contructor를 추가하고 각각의 데이터가 저장될 속성을 생성합니다.

using API.Entities;
using Microsoft.EntityFrameworkCore;

namespace API.Data
{
  public class ShopContext : DbContext
  {
    public ShopContext(DbContextOptions options) : base(options)
    {
    }

    public DbSet<Item> Items { get; set; }
  }
}

데이터베이스와 연결을 위해 연결문을 작성해야 하는데요. appsettings.Development.json과 appsettings.json 파일을 활용하여 환경변수로 사용이 가능합니다.

해당 파일에 시퀄라이트 연결문을 추가합니다. 시퀄라이트는 파일형식의 데이터베이스로 아래와 같이 연결문이 굉장히 간단합니다

"Data source=<datebaseName>.db"
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "ConnectionStrings": {
    "Default": "Data source=Store.db"
  }
}

4. Db Context 서비스 설정

모든 서비스의 설정은 Program.cs파일에서 가능합니다. 파일을 열고 아래와 같이 디비콘텍스트 서비스를 추가합니다.

builder.Services.AddDbContext<ShopContext>(opt =>
{
  opt.UseSqlite(builder.Configuration.GetConnectionString("Default"));
});


※ 아래처럼 Configuration을 사용하지 않고 직접 구문을 넣을 수도 있습니다.

builder.Services.AddDbContext<ShopContext>(opt =>
{
  opt.UseSqlite("Data Source=Store.db");
});

5. 마이그레이션


※ 아래 커맨드를 통해 사용 사용가능한 ef 명령어 확인이 가능합니다.

dotnet ef migrations

마이그레이션은 아래 명령어를 사용합니다. 

dotnet ef migrations add <MigrationName> -o <path>

명령어는 반드시 API 폴더 안에서 실행하여야 하며 서버가 구동 중이라면 서버를 중지시켜야 합니다.

성공 시 아래와 같은 메시지가 표시되며

지정한 경로에 아래와 같이 세 가지 파일이 생성됩니다.


※ 생성된 세 파일 중 .Designer.cs 와 Snapshot.cs는 생성된 데이터베이스의 백업기능을 하며, 테이블의 생성과 삭제 등 주요 코드는 <지정한 마이그레이션이름.cs> 파일에 있습니다. 

 

※ 한 가지 주의할 점은 마이그레이션 폴더 생성 시 Migration이라고 짓게 되면 마이그레이션이 상속받는 부모 클래스 'MIgration'과 중복되어 에러가 발생합니다.

여러 프로젝트를 가지는 경우 솔루션 단위에서 실행하는 것이 더 효율적인데요 명령어는 아래와 같습니다.

dotnet ef migrations add <MigrationName> -p Infrastructure/ -s API/ -o <Path>


6. 데이터베이스 생성하기

마이그레이션이 완료되면 아래 명령어로 데이터베이스를 생성합니다. 데이터베이스 명령어는 drop과 update 두 가지가 있습니다.

dotnet ef database update


※ 아래와 같은 에러가 발생한다면 연결문을 찾지 못하는 것이 원인으로 오타가 없는지 살펴봅니다.

 여러 프로젝트를 가지는 경우 솔루션 단위에서 실행하는 것이 더 효율적인데요 명령어는 아래와 같습니다.

dotnet ef database update -p Infrastructure/ -s API/

※ 데이터베이스 자동생성하기

 

자동 마이그레이션

데이터베이스를 생성에 필요한 마이그레이션 명령어를 매번 실행하지 않고 프로그램 작동 시 자동으로 동작하도록 설정하는 방법을 보겠습니다. 애플리케이션 생성 먼저 .NET 애플리케이션을

jin-co.tistory.com


이상으로 코드우선 방식으로 .NET과 시퀄라이트를 연결하는 방법을 살펴보았습니다.

 

728x90
반응형