다음을 통해 공유


Entity Framework 소개

엔터티 프레임워크는 데이터 지향 소프트웨어 응용 프로그램의 개발을 지원하는 ADO.NET의 기술 집합입니다. 데이터 지향 응용 프로그램의 설계자와 개발자는 두 가지 다른 목적을 달성하기 위해 노력해 왔습니다. 해결 중인 비즈니스 문제의 엔터티, 관계 및 논리를 모델링해야 하며, 데이터를 저장 및 검색하는 데 사용되는 데이터 엔진도 사용해야 합니다. 데이터는 각각 해당 프로토콜을 가진 여러 개의 저장소 시스템에 걸쳐 있을 수 있습니다. 단일 저장소 시스템에서 작동하는 응용 프로그램도 저장소 시스템의 요구 사항 및 효율적이고 유지 가능한 응용 프로그램 코드를 작성하기 위한 요구 사항의 균형을 조정해야 합니다.

그러나 엔터티 프레임워크를 사용하면 개발자가 기본 데이터베이스 테이블과 해당 데이터가 저장된 열을 고려할 필요 없이 고객이나 고객 주소와 같은 데이터를 도메인 특정 개체 및 속성의 형태로 다룰 수 있습니다. 개발자가 데이터를 처리할 때 작업할 수 있는 추상 수준의 권한을 높이고 데이터 지향 응용 프로그램을 만들고 유지하는 데 필요한 코드를 줄여 이러한 기능을 가능하게 합니다. 엔터티 프레임워크는 .NET Framework의 구성 요소이므로 .NET Framework 3.5 SP1(서비스 팩 1)이 설치된 모든 컴퓨터에서 엔터티 프레임워크 응용 프로그램을 실행할 수 있습니다.

개념적 모델 활성화

오랫동안 지속된 데이터 모델링의 일반적인 디자인 패턴에서는 데이터 모델을 개념적 모델, 논리 모델 및 실제 모델의 세 부분으로 나눕니다. 개념적 모델은 모델링되는 시스템의 엔터티 및 관계를 정의합니다. 관계형 데이터베이스에 대한 논리 모델은 FOREIGN KEY 제약 조건이 있는 테이블로 엔터티와 관계를 정규화합니다. 실제 모델은 분할 및 인덱싱과 같은 저장소 세부 정보를 지정하여 특정 데이터 엔진의 기능을 다룹니다.

데이터베이스 관리자는 성능 향상을 위해 실제 모델을 미세 조정하지만, 응용 프로그램 코드를 작성하는 프로그래머는 주로 SQL 쿼리를 작성하고 저장 프로시저를 호출하여 논리 모델에서 작업합니다. 개념적 모델은 일반적으로 응용 프로그램 요구 사항을 파악하고 전달하기 위한 도구로 사용되며, 프로젝트의 초기 단계에서 보고 토론한 다음 버려지는 단순한 다이어그램으로 사용되는 경우가 많습니다. 대부분의 개발 팀에서는 개념적 모델을 만드는 단계를 생략하고 관계형 데이터베이스의 테이블, 열 및 키를 지정하는 단계에서 작업을 시작합니다.

엔터티 프레임워크에서는 개발자가 개념적 모델의 엔터티와 관계를 쿼리할 수 있도록 하는 동시에 엔터티 프레임워크를 사용하여 이러한 작업을 데이터 소스 관련 명령으로 변환할 수 있도록 하여 개념적 모델을 활성화합니다. 이렇게 하면 응용 프로그램이 하드 코딩 방식으로 특정 데이터 소스에 종속되지 않습니다. 개념적 모델, 저장소 모델 및 두 모델 간의 매핑은 EDM(엔터티 데이터 모델)이라는 외부 사양에 표시됩니다. 저장소 모델과 매핑은 개념적 모델, 데이터 클래스 또는 응용 프로그램 코드를 변경하지 않아도 필요에 따라 변경될 수 있습니다. 저장소 모델은 공급자와 관련이 있으므로 다양한 데이터 소스에서 일관성 있는 개념적 모델을 사용할 수 있습니다.

EDM은 각각 해당하는 파일 이름 확장명을 가진 다음 세 개의 모델 및 매핑 파일로 정의됩니다.

  • 개념 스키마 정의 언어 파일(.csdl) - 개념적 모델을 정의합니다.

  • 저장소 스키마 정의 언어 파일(.ssdl) - 논리 모델이라고도 하는 저장소 모델을 정의합니다.

  • 매핑 사양 언어 파일(.msl) - 저장소와 개념적 모델 간의 매핑을 정의합니다.

엔터티 프레임워크에서는 이러한 XML 기반 모델 및 매핑 파일을 사용하여 개념적 모델의 엔터티 및 관계에 대한 만들기, 읽기, 업데이트 및 삭제 작업을 데이터 소스의 동등한 작업으로 변환합니다. EDM은 개념적 모델의 매핑 엔터티를 데이터 소스의 저장 프로시저로 매핑하는 기능도 지원합니다. 자세한 내용은 Entity Framework의 데이터 모델링을 참조하십시오.

데이터에 개체 매핑

개체 지향 프로그래밍을 사용하는 경우 데이터 저장소 시스템과 상호 작용해야 합니다. 클래스의 조직은 관계형 데이터베이스 테이블의 조직을 긴밀하게 미러링하는 경우가 많지만 완전히 일치하지는 않습니다. 여러 개의 정규화된 테이블이 하나의 클래스에 해당하는 경우가 많으며 클래스 간의 관계는 테이블 간의 관계와 다르게 표현됩니다. 예를 들어 판매 주문의 고객을 나타내기 위해 Order 클래스는 Customer 클래스 인스턴스에 대한 참조가 포함된 속성을 사용하지만, 데이터베이스의 Order 테이블 행에는 Customer 테이블의 기본 키 값에 해당하는 값을 가진 외래 키 열(또는 열 집합)이 포함됩니다. Customer 클래스는 Order 클래스 인스턴스의 컬렉션이 포함된 Orders 속성을 가질 수 있지만 데이터베이스의 Customer 테이블에는 해당하는 열이 없습니다.

기존 솔루션은 개체 지향 클래스와 속성을 관계형 테이블과 열에 매핑만 하여 흔히 "임피던스 불일치"라고 하는 이 간격을 연결하려고 했습니다. 기존의 이 방법 대신 엔터티 프레임워크에서는 논리 모델의 관계형 테이블, 열 및 FOREIGN KEY 제약 조건을 개념적 모델의 엔터티 및 관계에 매핑합니다. 이렇게 하면 보다 유연성 있게 개체를 정의하고 논리 모델을 최적화할 수 있습니다. 엔터티 데이터 모델 도구는 개념적 모델을 기반으로 확장 가능한 데이터 클래스를 생성합니다. 이러한 클래스는 개발자가 추가하는 멤버로 확장할 수 있는 부분 클래스입니다. 특정 개념적 모델에 대해 생성되는 클래스는 엔터티를 개체로 구체화하고 변경 내용을 추적 및 저장하기 위해 개체 서비스를 제공하는 기본 클래스에서 파생됩니다. 개발자는 이러한 클래스를 통해 엔터티 및 관계를 탐색 속성으로 관련된 개체로 사용할 수 있습니다. 개체 서비스에 대한 자세한 내용은 개체 서비스 개요(Entity Framework)를 참조하십시오.

엔터티 데이터 액세스 및 변경

단순한 개체-관계형 매핑 솔루션 이상의 의미가 있는 Entity Framework는 근본적으로 응용 프로그램이 개념적 모델의 엔터티 및 관계로 표현된 데이터에 액세스하여 변경할 수 있도록 합니다. 개체 서비스는 EDM을 사용하여 개념적 모델로 표현된 엔터티 형식에 대한 개체 쿼리를 데이터 소스 특정 쿼리로 변환합니다. 쿼리 결과는 개체 서비스에서 관리하는 개체로 구체화됩니다. 엔터티 프레임워크에서는 EDM을 쿼리하고 개체를 반환하는 다음 방법을 제공합니다.

  • LINQ to Entities - 개념적 모델에 정의된 엔터티 형식을 쿼리하기 위한 LINQ(Language-Integrated Query) 지원을 제공합니다. 자세한 내용은 LINQ to Entities 개요를 참조하십시오.

  • Entity SQL - 개념적 모델의 엔터티로 직접 작업하고 상속 및 관계와 같은 EDM 기능을 지원하는 SQL의 저장소 독립 언어입니다. Entity SQL은 EntityClient 공급자를 사용하여 실행되는 쿼리와 개체 쿼리에서 모두 사용됩니다. 자세한 내용은 Entity SQL 개요를 참조하십시오.

  • 쿼리 작성기 메서드 - LINQ 스타일 쿼리 메서드를 사용하여 Entity SQL 쿼리를 생성할 수 있습니다. 자세한 내용은 쿼리 작성기 메서드(Entity Framework)를 참조하십시오.

엔터티 프레임워크에는 EntityClient 데이터 공급자가 포함되어 있습니다. 이 공급자는 연결을 관리하고, 엔터티 쿼리를 데이터 소스 특정 쿼리로 변환하며, 개체 서비스에서 엔터티 데이터를 개체로 구체화할 때 사용하는 데이터 판독기를 반환합니다. 개체 구체화가 필요하지 않은 경우 응용 프로그램에서 Entity SQL 쿼리를 실행하고 반환된 읽기 전용 데이터 판독기를 사용할 수 있도록 하여 EntityClient 공급자를 표준 ADO.NET 데이터 공급자처럼 사용할 수도 있습니다. 자세한 내용은 Entity Framework용 EntityClient 공급자를 참조하십시오.

다음 다이어그램에서는 데이터 액세스를 위한 Entity Framework 아키텍처를 보여 줍니다.

Entity Framework 아키텍처 다이어그램

엔터티 프레임워크에서는 개념적 모델의 엔터티 컨테이너를 나타내며 ObjectContext에서 파생된 클래스를 생성합니다. 이 개체 컨텍스트는 변경 내용을 추적하고 ID, 동시성 및 관계를 관리하기 위한 기능을 제공합니다. 또한 이 클래스는 데이터 소스에 삽입, 업데이트 및 삭제를 쓰는 SaveChanges 메서드를 노출합니다. 쿼리와 마찬가지로, 이러한 변경 작업은 시스템에서 자동으로 생성된 명령이나 개발자가 지정한 저장 프로시저로 수행됩니다. 자세한 내용은 개체 추가, 수정 및 삭제(Entity Framework)를 참조하십시오.

엔터티 데이터 모델 도구

엔터티 프레임워크 런타임과 함께, .NET Framework 3.5 SP1에는 EDM 생성기(EdmGen.exe)가 포함되어 있습니다. 이 명령 프롬프트 유틸리티는 데이터 소스에 연결하고 엔터티와 테이블 간의 일 대 일 매핑을 기반으로 EDM을 생성합니다. 또한 개념적 모델 파일(.csdl)을 사용하여 엔터티 형식과 ObjectContext를 나타내는 클래스가 포함된 개체 계층 파일을 생성합니다. 자세한 내용은 EDM 생성기(EdmGen.exe)를 참조하십시오.

Visual Studio 2008에는 Visual Studio 응용 프로그램에서 EDM을 생성하고 유지하기 위한 다양한 도구 지원이 포함되어 있습니다. 엔터티 데이터 모델 디자이너는 형식당 하나의 테이블 및 계층당 하나의 테이블 상속, 여러 테이블에 매핑되는 분할 엔터티와 같은 고급 매핑 시나리오의 생성을 지원합니다. 자세한 내용은 ADO.NET 엔터티 데이터 모델 디자이너 개요를 참조하십시오.

자세한 정보

다음 항목을 사용하여 엔터티 프레임워크에 대해 자세히 알아볼 수 있습니다.

  • 퀵 스타트(Entity Framework)
    Visual Studio 2008에서 엔터티 데이터 모델을 사용하여 신속하게 첫 번째 엔터티 프레임워크 응용 프로그램을 만드는 방법을 보여 줍니다.
  • 응용 프로그램 시나리오(Entity Framework)
    쿼리 작성, 개체를 데이터 컨트롤에 바인딩 또는 비즈니스 논리 구현과 같은 특정 응용 프로그램 시나리오와 일치하는 항목에 대한 작업 기반 링크를 제공합니다.
  • Entity Framework 기능
    엔터티 프레임워크를 작성하는 기능 및 이러한 기능을 설명하는 항목에 대한 링크의 자세한 정보를 제공합니다.
  • Entity Framework 용어
    EDM 및 엔터티 프레임워크에서 도입되었으며 엔터티 프레임워크 설명서에서 사용된 대부분의 용어를 정의합니다.
  • Entity Framework 리소스
    개념 항목에 대한 링크와 엔터티 프레임워크 응용 프로그램을 빌드하기 위한 외부 항목 및 리소스에 대한 링크를 제공합니다.

참고 항목

기타 리소스

ADO.NET Entity Framework