Entity Framework Core에서 DbContext를 사용하는 방법

Microsoft의 Entity Framework는 데이터 모델에서 응용 프로그램의 개체 모델을 격리하는 데 도움이되는 ADO.Net 용 오픈 소스 개체 관계형 매퍼 또는 ORM입니다. Entity Framework는 데이터가 기본 데이터베이스에서 유지되는 방식을 몰라도 CRUD (만들기, 읽기, 업데이트 및 삭제) 작업을 수행하는 코드를 작성할 수 있도록하여 애플리케이션의 데이터 액세스를 단순화합니다.

DbContext는 도메인 클래스와 데이터베이스 간의 브리지 역할을합니다. 이 문서에서는 DbContextOptions 인스턴스를 사용하여 DbContext를 구성하여 데이터베이스에 연결하고 Entity Framework Core 공급자를 사용하여 CRUD 작업을 수행하는 방법을 살펴 봅니다.

DbContext 설명

DbContext는 데이터베이스와의 연결 세션을 나타내는 Entity Framework의 필수 구성 요소입니다. DbContext를 활용하여 데이터를 엔터티에 쿼리하거나 엔터티를 기본 데이터베이스에 저장할 수 있습니다. Entity Framework Core의 DbContext에는 다음과 같은 여러 책임이 있습니다.

  • 연결 관리
  • 데이터베이스에서 데이터 쿼리
  • 데이터베이스에 데이터 저장
  • 변경 내용 추적
  • 캐싱
  • 거래 관리

다음 섹션에서는 ASP.Net Core에서 DbContext로 작업 할 수있는 방법을 살펴볼 것입니다.

Visual Studio에서 ASP.Net Core 애플리케이션 만들기

ASP.Net Core 애플리케이션을 만드는 것으로 시작하겠습니다. 이 게시물은 Visual Studio 2017이 시스템에 이미 설치되어 있다고 가정합니다. Visual Studio 2017이 설치되어 있지 않은 경우 여기에서 사본을 다운로드 할 수 있습니다. 그런 다음 다음 단계에 따라 새 ASP.Net Core 프로젝트를 만듭니다.

  1. Visual Studio 2017 IDE를 시작합니다.
  2. 파일-> 새로 만들기-> 프로젝트를 클릭합니다.
  3. "ASP.Net Core Web Application"프로젝트 템플릿을 선택합니다.
  4. 프로젝트의 이름과 위치를 지정하십시오.
  5. 확인을 클릭하십시오.
  6. “New ASP.Net Core Web Application”대화창에서 .Net Core를 선택합니다.
  7. 드롭 다운 목록에서 ASP.Net Core 2.1을 선택합니다. 
  8. 프로젝트 템플릿으로 "Web API"를 선택합니다. 
  9. "Docker 지원 활성화"체크 상자를 무시하십시오. 여기서는 Docker를 사용하지 않습니다.
  10. "인증 없음"메시지가 표시되는지 확인합니다. 우리는 이것도 필요하지 않을 것입니다. 
  11. 확인 클릭

그리고 그게 다야! 이 애플리케이션을 사용하여 다음 섹션에서 Entity Framework Core를 탐색합니다.

Entity Framework Core에서 새 DbContext 만들기

사용자 지정 컨텍스트 클래스를 만들려면 아래와 같이 Entity Framework Core에서 DbContext 기본 클래스를 확장해야합니다.

공용 클래스 CustomContext : DbContext

    {

        public CustomContext (DbContextOptions options) : base (options)

        {

        }

        보호 된 재정의 void OnConfiguring (DbContextOptionsBuilder optionsBuilder)

        {

           // 여기에 코드를 작성하여 컨텍스트 구성

        }

        보호 된 재정의 void OnModelCreating (ModelBuilder modelBuilder)

        {

            // 여기에 코드를 작성하여 모델 구성

        }

    }

위의 CustomContext 클래스를 참조하십시오. DbContextOptions 클래스의 인스턴스에 대한 참조를 허용합니다. 이 인스턴스에는 DbContext에 필요한 구성 정보가 포함되어 있습니다. OnConfiguring 메서드를 사용하여 DbContext를 구성 할 수도 있습니다. ModelBuilder 클래스의 인스턴스에 대한 참조를 인수로받는 OnModelCreating 메서드는 모델을 구성하는 데 사용됩니다.

DbContext 클래스에는 일반적으로 아래 코드 조각에 표시된 엔터티의 DbSet 속성이 있습니다.

공용 클래스 CustomContext : DbContext

    {

        public CustomContext (DbContextOptions options) : base (options)

        {

        }

        보호 된 재정의 void OnConfiguring (DbContextOptionsBuilder optionsBuilder)

        {

        }

        보호 된 재정의 void OnModelCreating (ModelBuilder modelBuilder)

        {

        }

        public DbSet Authors {get; 세트; }

        공개 DbSet 블로그 {get; 세트; }

    }

Entity Framework Core 런타임에 DbContext 등록

다음으로 Startup 클래스의 ConfigureServices 메서드를 통해 사용자 지정 DbContext 클래스를 IServiceCollection에 서비스로 등록해야합니다.

     public void ConfigureServices (IServiceCollection 서비스)

        {

            services.AddMvc (). SetCompatibilityVersion

            (CompatibilityVersion.Version_2_1);

            services.AddDbContext (옵션 =>

             options.UseSqlServer

             (Configuration.GetConnectionString ( "TestConnection")));

        }

연결 문자열은 IConfiguration 인스턴스를 사용하여 얻습니다. AddDbContext 확장 메서드는 DbContext를 서비스로 등록하는 데 사용됩니다. DbContextOptionsBuilder에 대한 참조를 사용하여 DbContextOptions를 구성하는 방법에 유의하십시오. UseSqlServer 확장 메서드는 Entity Framework Core 런타임에 SQL Server 데이터베이스 공급자를 등록하는 데 사용됩니다.

또는 아래 코드 조각과 같이 OnConfigure 메서드를 재정 의하여 SQL Server 데이터베이스 공급자를 등록 할 수 있습니다.

보호 된 재정의 void OnConfiguring (DbContextOptionsBuilder optionsBuilder)

    {

        if (! optionsBuilder.IsConfigured)

        {

            optionsBuilder.UseSqlServer ( "TestConnection");

        }

    }

종속성 주입과 함께 DbContext 사용

컨트롤러 메서드에서 구현 한 사용자 지정 DbContext를 사용하려면 종속성 주입을 활용해야합니다. 다음 코드 스 니펫은이를 달성하는 방법을 보여줍니다.

공용 클래스 ValuesController : ControllerBase

    {

        개인 CustomContext dbContext;

        공용 ValuesController (CustomContext customContext)

        {

            dbContext = customContext;

        }

       // 기타 방법

    }

그게 당신이해야 할 전부입니다. 이제 컨트롤러 메서드에서 CustomContext 클래스의 인스턴스를 활용하여 CRUD 작업을 수행 할 수 있습니다.

DbContext는 개념적으로 ObjectContext와 유사합니다. 작업 단위와 리포지토리 디자인 패턴의 조합을 나타내는 DbContext는 사용중인 응용 프로그램과 데이터베이스 간의 모든 상호 작용을 담당합니다. 여기의 향후 게시물에서 Entity Framework Core의 추가 측면에 대해 논의 할 것입니다.