본문 바로가기
.NET/CRUD

[.NET] 데이터베이스 연결(DbContext 클래스)

by 가든가든 2023. 3. 10.
728x90

SQL 서버를 사용한 응용 프로그램을 개발할 때 Entity Framework Core를 사용하여 데이터베이스에 연결할 수 있습니다.

Entity Framework를 사용하는 두 가지 접근 방식이 있는데, 코드 퍼스트(Code First) 또는 데이터베이스 퍼스트(Database First) 의 접근 방식이 있습니다.

코드 퍼스트(Code First)
코드 퍼스트는 데이터베이스 스키마가 아직 생성되지 않은 경우에 유용합니다. 이 접근 방식은 개발자가 코드로 데이터 모델을 정의하고, Entity Framework가 이를 기반으로 데이터베이스 스키마를 생성하는 것입니다.

 

데이터베이스 퍼스트(Database First)
반면에, 데이터베이스 퍼스트는 이미 데이터베이스 스키마가 있는 경우에 유용합니다. 이 접근 방식은 개발자가 데이터베이스 스키마를 먼저 정의하고, Entity Framework가 이를 기반으로 C# 클래스를 생성하는 것입니다.
데이터베이스에 있는 테이블을 C# 클래스로 매핑하려면, Entity Framework에서 Scaffold-DbContext 명령어를 실행해야합니다.

두 가지 접근 방식 중에서 이번 글에서 소개하는 데이터베이스 연결 접근 방식은 코드 퍼스트(Code First)에 해당됩니다.

 

먼저 DbContext와 연결할 모델 클래스를 하나 생성해 주도록 하겠습니다.

 

1. Models 폴더 안에 Category.cs 클래스 파일 생성

using System.ComponentModel.DataAnnotations;

namespace BulkyBookWeb.Models
{
    public class Category
    {
        [Key]
        public int Id { get; set; }
        [Required]
        public string Name { get; set; }
        public int DisplayOrder { get; set; }
        public DateTime CreateDateTime { get; set; } = DateTime.Now;
    }
}
  • Id: 카테고리의 고유 식별자를 나타내는 속성으로, KeyAttribute를 사용하여 키 역할을 하도록 설정되어 있습니다.
  • Name: 카테고리의 이름을 나타내는 속성으로, RequiredAttribute를 사용하여 필수 입력 항목임을 표시하고 있습니다.
  • DisplayOrder: 카테고리의 표시 순서를 나타내는 속성입니다.
  • CreateDateTime: 카테고리가 생성된 시간을 나타내는 속성입니다. DateTime.Now로 초기화되어 있으며, 데이터베이스에 저장될 때 현재 시간으로 설정됩니다.

2.  다음으로는 DB 연결 문자열을 얻기 위해 데이터베이스 작업할 때 사용하는 SSMS 에서 연결 가능한 서버 이름을 복사해줍니다.

그 다음으로 appsettings.json 에 들어와서 연결 문자열을 지정해줍니다.

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "DefaultConnection": "Server=DESKTOP-ENDAPE0\\SQLEXPRESS;Database=Bulky;Trusted_Connection=True;TrustServerCertificate=True"
  }
}

DefaultConnection : 애플리케이션에서 사용할 기본 연결 문자열을 지정해주는 역할을 합니다.

 

3. 이제부터 Entity Framework Core를 사용하여 데이터베이스에 연결할 수 있습니다. 이를 위해서는 DbContext 클래스를 만들고 연결 문자열을 지정해야 합니다.

DbContext 클래스 이름은 ApplicationDbContext.cs로 하나 생성하도록 하겠습니다.

Entity Framework Core를 사용하기 위해서는 해당 패키지를 설치해야 사용할 수 있습니다. (DbContext 빨간줄에 컨트롤 + . 하면 안내 목록이 나오는데 EntityFrameworkCore 패키지 설치하면 됨)

using BulkyBookWeb.Models;
using Microsoft.EntityFrameworkCore; // NuGet 패키지 설치

namespace BulkyBookWeb.Data
{
    public class ApplicationDbContext :DbContext
    {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
        {

        }
        public DbSet<Category> Categories { get; set; }
    }
}

 

DbSet<T>을 사용하여 Category 모델 클래스와 연결됩니다. Category 클래스는 아래의 BulkyBookWeb.Models 네임스페이스에 정의되어 있습니다.

생성자는 DbContextOptions<ApplicationDbContext>을 매개변수로 받고, 이를 부모 클래스의 생성자에 전달합니다. DbContextOptions<ApplicationDbContext>은 애플리케이션에서 사용할 데이터베이스를 구성하는 데 필요한 정보를 포함합니다.

 

4. 해당 DbContext 클래스를 사용하여 데이터베이스에 접근하려면 다음과 같이 program.cs에서 DbContextOptions를 설정해야 합니다.

아래의 코드 추가하였음.

builder.Services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(
                builder.Configuration.GetConnectionString("DefaultConnection")
                ));

여기서 UseSqlServer 메서드가 빨간줄로 그어져 있을 수 있다. 해당 메서드를 사용하기 위해서는 SqlServer 패키지를 설치해줘야 한다.

끝.

이렇게해서 코드 퍼스트 방식으로 데이터베이스를 연결하는 방법에 대해서 알아봤다.

728x90

'.NET > CRUD' 카테고리의 다른 글

[.NET] Create 구현하기  (0) 2023.03.19
[.NET] 컨트롤러와 뷰(View) 구현하기  (0) 2023.03.18
[.NET] 데이터베이스 마이그레이션 하기  (0) 2023.03.11