Entity Framework는 데이터 지향 소프트웨어 애플리케이션 개발을 지원하는 ADO.NET 기술 세트입니다. 데이터 지향 애플리케이션의 설계자와 개발자는 매우 다른 두 가지 목표를 달성해야 하는 데 어려움을 겪었습니다. 해결 중인 비즈니스 문제의 엔터티, 관계 및 논리를 모델링해야 하며 데이터를 저장하고 검색하는 데 사용되는 데이터 엔진도 사용해야 합니다. 데이터는 각각 자체 프로토콜을 사용하는 여러 스토리지 시스템에 걸쳐 있을 수 있습니다. 단일 스토리지 시스템을 사용하는 애플리케이션도 스토리지 시스템의 요구 사항을 효율적이고 유지 관리 가능한 애플리케이션 코드 작성 요구 사항과 균형을 유지해야 합니다.
Entity Framework를 사용하면 개발자가 이 데이터가 저장되는 기본 데이터베이스 테이블 및 열에 관심을 갖지 않고도 고객 및 고객 주소와 같은 도메인별 개체 및 속성 형식의 데이터로 작업할 수 있습니다. Entity Framework를 사용하면 개발자가 데이터를 처리할 때 더 높은 수준의 추상화에서 작업할 수 있으며, 기존 애플리케이션보다 코드가 적은 데이터 지향 애플리케이션을 만들고 유지 관리할 수 있습니다. Entity Framework는 .NET Framework의 구성 요소이므로 Entity Framework 애플리케이션은 버전 3.5 SP1로 시작하는 .NET Framework가 설치된 모든 컴퓨터에서 실행할 수 있습니다.
모델에 생명 부여
애플리케이션 또는 서비스를 빌드할 때의 오랜 일반적인 디자인 방법은 애플리케이션 또는 서비스를 도메인 모델, 논리 모델 및 물리적 모델의 세 부분으로 분할하는 것입니다. 도메인 모델은 모델링되는 시스템의 엔터티 및 관계를 정의합니다. 관계형 데이터베이스의 논리 모델은 엔터티와 관계를 외래 키 제약 조건이 있는 테이블로 정규화합니다. 실제 모델은 분할 및 인덱싱과 같은 스토리지 세부 정보를 지정하여 특정 데이터 엔진의 기능을 해결합니다.
물리적 모델은 성능을 향상시키기 위해 데이터베이스 관리자에 의해 구체화되지만 애플리케이션 코드를 작성하는 프로그래머는 주로 SQL 쿼리를 작성하고 저장 프로시저를 호출하여 논리 모델을 사용하는 것으로 제한됩니다. 도메인 모델은 일반적으로 애플리케이션의 요구 사항을 캡처하고 전달하기 위한 도구로 사용되며, 프로젝트의 초기 단계에서 보고 논의한 다음 중단되는 불활성 다이어그램으로 자주 사용됩니다. 많은 개발 팀은 개념적 모델 만들기를 건너뛰고 관계형 데이터베이스에 테이블, 열 및 키를 지정하여 시작합니다.
Entity Framework는 엔터티 프레임워크를 사용하여 해당 작업을 데이터 원본별 명령으로 변환하는 동시에 개발자가 도메인 모델(Entity Framework의 개념적 모델이라고 함)에서 엔터티 및 관계를 쿼리할 수 있도록 하여 모델에 대한 수명을 제공합니다. 이렇게 하면 특정 데이터 원본에 대한 하드 코딩된 종속성에서 애플리케이션이 해제됩니다.
Code First로 작업할 때 개념적 모델은 코드의 스토리지 모델에 매핑됩니다. Entity Framework는 정의한 개체 형식 및 추가 구성에 따라 개념적 모델을 유추할 수 있습니다. 매핑 메타데이터는 도메인 유형을 정의한 방법과 코드에서 제공하는 추가 구성 정보를 조합하여 런타임 중에 생성됩니다. Entity Framework는 메타데이터에 따라 필요에 따라 데이터베이스를 생성합니다. 자세한 내용은 모델 만들기를 참조하세요.
엔터티 데이터 모델 도구로 작업할 때 개념적 모델, 스토리지 모델 및 둘 사이의 매핑은 XML 기반 스키마로 표현되고 해당 이름 확장명이 있는 파일에 정의됩니다.
CSDL(개념 스키마 정의 언어)은 개념적 모델을 정의합니다. CSDL은 Entity Framework의 엔터티 데이터 모델 구현입니다. 파일 확장명은 .csdl입니다.
SSDL(스토어 스키마 정의 언어)은 논리 모델이라고도 하는 스토리지 모델을 정의합니다. 파일 확장명은 .ssdl입니다.
MSL(매핑 사양 언어)은 스토리지와 개념 모델 간의 매핑을 정의합니다. 파일 확장명은 .msl입니다.
스토리지 모델 및 매핑은 개념적 모델, 데이터 클래스 또는 애플리케이션 코드를 변경하지 않고도 필요에 따라 변경될 수 있습니다. 스토리지 모델은 공급자별이므로 다양한 데이터 원본에서 일관된 개념적 모델을 사용할 수 있습니다.
Entity Framework는 이러한 모델 및 매핑 파일을 사용하여 개념적 모델의 엔터티 및 관계에 대한 작업을 데이터 원본의 동등한 작업에 대해 만들고, 읽고, 업데이트하고, 삭제합니다. Entity Framework는 개념적 모델의 엔터티를 데이터 원본의 저장 프로시저에 매핑하는 기능도 지원합니다. 자세한 내용은 CSDL, SSDL 및 MSL 사양을 참조하세요.
데이터에 개체 매핑
개체 지향 프로그래밍은 데이터 스토리지 시스템과 상호 작용하는 데 어려움을 줍니다. 클래스 구성은 관계형 데이터베이스 테이블의 구성을 미러링하는 경우가 많지만 적합하지는 않습니다. 여러 정규화된 테이블은 종종 단일 클래스에 해당하며, 클래스 간의 관계는 테이블 간의 관계가 표현되는 것과 다르게 표현되는 경우가 많습니다. 예를 들어 판매 주문 Order
에 대한 고객을 나타내기 위해 클래스는 클래스 인스턴스에 대한 참조가 포함된 속성을 사용할 수 있고Customer
, 데이터베이스의 테이블 행에는 테이블의 Order
기본 키 값 Customer
에 해당하는 값이 있는 외래 키 열(또는 열 집합)이 포함될 수 있습니다. 클래스에는 Customer
클래스의 인스턴스 컬렉션이 포함된 속성 Orders
이 있을 수 있지만 Order
데이터베이스의 Customer
테이블에는 비교할 수 있는 열이 없습니다. Entity Framework는 개발자에게 이러한 방식으로 관계를 나타내거나 데이터베이스에 표시되는 관계를 보다 긴밀하게 모델링할 수 있는 유연성을 제공합니다.
기존 솔루션은 개체 지향 클래스와 속성을 관계형 테이블 및 열에만 매핑하여 "임피던스 불일치"라고도 하는 이 격차를 해소하려고 했습니다. Entity Framework는 이러한 기존 접근 방식을 사용하는 대신 논리 모델의 관계형 테이블, 열 및 외래 키 제약 조건을 개념적 모델의 엔터티 및 관계에 매핑합니다. 이렇게 하면 개체를 정의하고 논리 모델을 최적화할 때 유연성이 향상됩니다. 엔터티 데이터 모델 도구는 개념적 모델을 기반으로 확장 가능한 데이터 클래스를 생성합니다. 이러한 클래스는 개발자가 추가하는 추가 멤버로 확장할 수 있는 부분 클래스입니다. 기본적으로 특정 개념적 모델에 대해 생성된 클래스는 엔터티를 개체로 구체화하고 변경 내용을 추적하고 저장하는 서비스를 제공하는 기본 클래스에서 파생됩니다. 개발자는 이러한 클래스를 사용하여 엔터티와 관계를 연관된 개체로 다룰 수 있습니다. 개발자는 개념적 모델에 대해 생성된 클래스를 사용자 지정할 수도 있습니다. 자세한 내용은 개체 작업을 참조하세요.
엔터티 데이터 액세스 및 변경
Entity Framework는 다른 개체 관계형 매핑 솔루션 외에도 기본적으로 애플리케이션이 개념적 모델에서 엔터티 및 관계로 표현되는 데이터에 액세스하고 변경할 수 있도록 하는 것입니다. Entity Framework는 모델 및 매핑 파일의 정보를 사용하여 개념적 모델에 표시된 엔터티 형식에 대한 개체 쿼리를 데이터 원본별 쿼리로 변환합니다. 쿼리 결과는 Entity Framework에서 관리하는 개체로 구체화됩니다. Entity Framework는 개념적 모델을 쿼리하고 개체를 반환하는 다음과 같은 방법을 제공합니다.
LINQ to Entities. 개념적 모델에 정의된 엔터티 형식 쿼리에 대한 LINQ(Language-Integrated Query) 지원을 제공합니다. 자세한 내용은 LINQ to Entities를 참조하세요.
Entity SQL. 개념적 모델의 엔터티와 직접 작동하고 엔터티 데이터 모델 개념을 지원하는 SQL의 스토리지 독립적 언어입니다. 엔터티 SQL은 EntityClient 공급자를 사용하여 실행되는 개체 쿼리 및 쿼리에 모두 사용됩니다. 자세한 내용은 Entity SQL 개요를 참조하세요.
Entity Framework에는 EntityClient 데이터 공급자가 포함됩니다. 이 공급자는 연결을 관리하고, 엔터티 쿼리를 데이터 원본별 쿼리로 변환하고, Entity Framework에서 엔터티 데이터를 개체로 구체화하는 데 사용하는 데이터 판독기를 반환합니다. 개체 구체화가 필요하지 않은 경우 애플리케이션에서 Entity SQL 쿼리를 실행하고 반환된 읽기 전용 데이터 판독기를 사용할 수 있도록 하여 EntityClient 공급자를 표준 ADO.NET 데이터 공급자처럼 사용할 수도 있습니다. 자세한 내용은 Entity Framework용 EntityClient 공급자를 참조하세요.
다음 다이어그램에서는 데이터에 액세스하기 위한 Entity Framework 아키텍처를 보여 줍니다.
Entity Data Model Tools는 개념적 모델에서 System.Data.Objects.ObjectContext
또는 System.Data.Entity.DbContext
에서 파생된 엔터티 컨테이너를 나타내는 클래스를 생성할 수 있습니다. 이 개체 컨텍스트는 변경 내용을 추적하고 ID, 동시성 및 관계를 관리하기 위한 기능을 제공합니다. 또한 이 클래스는 SaveChanges
삽입, 업데이트 및 삭제를 데이터 원본에 쓰는 메서드를 노출합니다. 쿼리와 마찬가지로 이러한 변경 내용은 시스템에서 자동으로 생성되는 명령이나 개발자가 지정한 저장 프로시저에 의해 이루어집니다.
데이터 공급자
공급자는 EntityClient
개념 엔터티 및 관계 측면에서 데이터에 액세스하여 ADO.NET 공급자 모델을 확장합니다. Entity SQL을 사용하는 쿼리를 실행합니다. Entity SQL은 데이터베이스와 통신할 수 있는 EntityClient
기본 쿼리 언어를 제공합니다. 자세한 내용은 Entity Framework용 EntityClient 공급자를 참조하세요.
Entity Framework에는 정식 명령 트리를 지원하는 업데이트된 SqlClient 데이터 공급자가 포함되어 있습니다. 자세한 내용은 Entity Framework에 대한 SqlClient를 참조하세요.
엔터티 데이터 모델 도구
Visual Studio는 Entity Framework 런타임과 함께 매핑 및 모델링 도구를 포함합니다. 자세한 내용은 모델링 및 매핑을 참조하세요.
더 알아보세요
Entity Framework에 대한 자세한 내용은 다음을 참조하세요.
시작 - 간단한 Entity Framework 애플리케이션을 만드는 방법을 보여 주는 빠른 시작을 사용하여 빠르게 시작하고 실행하는 방법에 대한 정보를 제공합니다.
Entity Framework 용어 - Entity 데이터 모델 및 Entity Framework에서 도입되어 Entity Framework 문서에서 사용되는 많은 용어를 정의합니다.
Entity Framework 리소스 - 개념 항목에 대한 링크와 Entity Framework 애플리케이션을 빌드하기 위한 외부 토픽 및 리소스에 대한 링크를 제공합니다.