Entity Framework Core

EF(Entity Framework) Core는 널리 사용되는 Entity Framework 데이터 액세스 기술의 가볍고 확장 가능한 오픈 소스 플랫폼 교차 버전입니다.

EF Core는 다음과 같은 O/RM(개체 관계형 매퍼)으로 사용될 수 있습니다.

  • .NET 개발자가 .NET 개체를 사용하여 데이터베이스로 작업할 수 있도록 합니다.
  • 개발자가 일반적으로 작성해야 하는 대부분의 데이터 액세스 코드가 필요하지 않습니다.

EF Core 는 여러 데이터베이스 엔진을 지원합니다. 자세한 내용은 데이터베이스 공급자를 참조하세요.

모델

EF Core에서는 데이터 액세스가 모델을 통해 수행됩니다. 모델은 엔터티 클래스 및 데이터베이스와의 세션을 나타내는 컨텍스트 개체로 구성됩니다. 컨텍스트 개체를 사용하여 데이터를 쿼리하고 저장할 수 있습니다. 자세한 내용은 모델 만들기를 참조하세요.

EF는 다음과 같은 모델 개발 방식을 지원합니다.

  • 기존 데이터베이스에서 모델을 생성합니다.
  • 데이터베이스와 일치하는 모델을 직접 코딩합니다.
  • 모델을 만든 후에 EF 마이그레이션을 사용하여 모델에서 데이터베이스를 만듭니다. 마이그레이션을 사용하면 모델이 변경함에 따라 데이터베이스가 진화할 수 있습니다.
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;

namespace Intro
{
    public class BloggingContext : DbContext
    {
        public DbSet<Blog> Blogs { get; set; }
        public DbSet<Post> Posts { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer(
                @"Server=(localdb)\mssqllocaldb;Database=Blogging;Integrated Security=True");
        }
    }

    public class Blog
    {
        public int BlogId { get; set; }
        public string Url { get; set; }
        public int Rating { get; set; }
        public List<Post> Posts { get; set; }
    }

    public class Post
    {
        public int PostId { get; set; }
        public string Title { get; set; }
        public string Content { get; set; }

        public int BlogId { get; set; }
        public Blog Blog { get; set; }
    }
}

쿼리

엔터티 클래스의 인스턴스는 LINQ(Language Integrated Query)를 사용하여 데이터베이스에서 검색됩니다. 자세한 내용은 데이터 쿼리를 참조하세요.

using (var db = new BloggingContext())
{
    var blogs = db.Blogs
        .Where(b => b.Rating > 3)
        .OrderBy(b => b.Url)
        .ToList();
}

데이터 저장

데이터는 엔터티 클래스의 인스턴스를 통해 데이터베이스에서 만들어지고 삭제되며 수정됩니다. 자세한 내용은 자세한 내용은 데이터 저장을 참조하세요.

using (var db = new BloggingContext())
{
    var blog = new Blog { Url = "http://sample.com" };
    db.Blogs.Add(blog);
    db.SaveChanges();
}

EF O/RM 고려 사항

EF Core는 많은 프로그래밍 정보를 추상화하는 데 유용하지만 프로덕션 앱에서 일반적인 문제를 방지하는 데 도움이 되는 모든 O/RM에 적용되는 몇 가지 모범 사례가 있습니다.

  • 고성능 프로덕션 앱에서 데이터를 설계, 디버그, 프로파일링 및 마이그레이션하려면 기본 데이터베이스 서버에 대한 중간 수준 이상의 지식이 필요합니다. 예를 들어 기본 키 및 외래 키, 제약 조건, 인덱스, 정규화, DML 및 DDL 문, 데이터 형식, 프로파일링 등에 대한 지식이 필요합니다.
  • 기능 및 통합 테스트: 프로덕션 환경을 최대한 비슷하게 복제하여 다음을 수행해야 합니다.
    • 앱에서 특정 버전의 데이터베이스 서버를 사용하는 경우에만 표시되는 문제를 찾습니다.
    • EF Core 및 기타 종속성을 업그레이드할 때 호환성이 손상되는 변경 사항을 파악합니다. 예를 들어 ASP.NET Core, OData, AutoMapper와 같은 프레임워크를 추가하거나 업그레이드합니다. 종속성은 예기치 않은 방식으로 EF Core에 영향을 줄 수 있습니다.
  • 대표적인 부하를 통해 성능 및 스트레스 테스트 일부 기능의 단순한 사용은 잘 확장되지 않습니다. 예를 들어 여러 컬렉션에 지연 로드의 과도한 사용, 인덱싱되지 않은 열에 대한 조건부 쿼리, 저장소에서 생성된 값이 포함된 대량 업데이트 및 삽입, 동시성 처리 부족, 큰 모델, 부적절한 캐시 정책 등이 포함됩니다.
  • 보안 검토: 예를 들어 연결 문자열 및 기타 비밀 처리, 배포 이외 작업의 데이터베이스 권한, 원시 SQL의 입력 유효성 검사, 중요 데이터의 암호화 등이 있습니다.
  • 로깅 및 진단이 충분하고 사용 가능한지 확인합니다. 예를 들어 적절한 로깅 구성, 쿼리 태그, Application Insights가 있습니다.
  • 오류 복구. 버전 롤백, 대체 서버, 스케일 아웃 및 부하 분산, DoS 완화, 데이터 백업과 같은 일반적인 오류 시나리오의 대체 계획을 준비합니다.
  • 애플리케이션 배포 및 마이그레이션. 배포 중에 마이그레이션을 적용할 방식을 계획합니다. 애플리케이션을 시작할 때 마이그레이션을 적용하면 동시성 문제가 발생할 수 있으며 일반 작업에 필요한 것 보다 높은 권한이 필요합니다. 준비를 사용하여 마이그레이션 중에 심각한 오류를 쉽게 복구할 수 있습니다. 자세한 내용은 마이그레이션 적용을 참조하세요.
  • 생성된 마이그레이션을 자세히 검사하고 테스트합니다. 프로덕션 데이터에 적용하기 이전에 마이그레이션을 철저히 테스트해야 합니다. 테이블에 프로덕션 데이터가 포함된 경우 스키마의 모양과 열 유형을 쉽게 변경할 수 없습니다. 예를 들어 SQL Server에서 nvarchar(max)decimal(18, 2)은 문자열 및 10진수 속성에 매핑되는 열에 가장 적합한 형식이 아니지만, 특정 시나리오에 대한 지식이 없으므로 EF에서 사용하는 기본값입니다.

다음 단계

기본 자습서는 Entity Framework Core 시작을 참조하십시오.