맨위로가기

엔티티 프레임워크

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

엔티티 프레임워크(EF)는 .NET Framework를 위한 객체 관계 매핑(O/R 매핑) 프레임워크로, 데이터베이스와의 상호 작용을 위한 추상화 계층을 제공한다. 2008년 처음 출시된 이후 여러 버전의 개선을 거쳐 왔으며, 특히 EF Core는 .NET Core 및 .NET 5 이상을 위한 완전히 재작성된 버전이다. EF는 개발자가 데이터베이스 스키마를 직접 다루지 않고도 객체 지향 방식으로 데이터에 접근하고 조작할 수 있게 해준다. 엔티티 데이터 모델(EDM)을 사용하여 데이터베이스와 애플리케이션 간의 매핑을 정의하며, 쿼리에는 Entity SQL과 LINQ to Entities를 지원한다. 개발 편의성을 위해 데이터베이스 우선, 모델 우선, 코드 우선의 세 가지 개발 방식을 제공하며, 데이터 모델 변경에 따른 데이터베이스 구조 변경을 관리하는 마이그레이션 기능을 제공한다.

더 읽어볼만한 페이지

  • 객체 관계 매핑 - 마이바티스
    마이바티스는 자바 객체를 SQL 구문에 매핑하는 ORM 프레임워크이며, JDBC보다 단순한 코딩과 SQL 문 실행을 지원하고, XML 파일이나 어노테이션에 SQL 문을 저장하여 관리하며, 스프링 프레임워크와의 통합, 선언적 데이터 캐싱, 코드 생성기 등의 기능을 제공한다.
  • 객체 관계 매핑 - 자바 퍼시스턴스
    자바 퍼시스턴스(JPA)는 객체 관계 매핑(ORM)을 위한 자바 플랫폼 기술 규격으로, 여러 버전 업데이트와 자카르타 퍼시스턴스로의 명칭 변경을 거쳐 엔티티, JPQL 등의 주요 구성 요소를 통해 개발자가 데이터베이스를 객체 지향적으로 다루도록 지원합니다.
  • 마이크로소프트의 자유 소프트웨어 - 마이크로소프트 코그니티브 툴킷
  • 마이크로소프트의 자유 소프트웨어 - ASP.NET
    ASP.NET은 .NET Framework 기반의 마이크로소프트 웹 애플리케이션 개발 플랫폼으로, ISAPI를 통해 동작하며 다양한 프로그래밍 모델과 개발 도구를 지원하고, 부트스트랩, OAuth 2.0, OData 등 최신 기술을 통합하여 강력한 웹 개발 환경을 제공한다.
  • 2008년 소프트웨어 - 안드로이드 (운영체제)
    구글이 개발한 리눅스 커널 기반의 모바일 운영체제인 안드로이드는 오픈소스 플랫폼으로 다양한 기기에서 활용되며 세계적으로 널리 사용되지만, 개인정보 보호 문제와 독점적 지위 남용 논란 등의 비판도 존재한다.
  • 2008년 소프트웨어 - 구글 크롬
    구글 크롬은 구글이 개발한 웹 브라우저로, 크로미엄 프로젝트를 기반으로 오픈 소스 코드를 활용하여 개발되었으며, 다양한 기능과 운영체제 지원을 통해 세계 시장 점유율 1위를 기록하지만 개인 정보 보호 정책으로 비판을 받기도 한다.
엔티티 프레임워크 - [IT 관련 정보]에 관한 문서
기본 정보
Entity Framework Core 로고
Entity Framework Core 로고
개발자.NET Foundation
최초 출시일2008년 8월 11일
최신 안정화 버전Entity Framework 6: v6.4.4
Entity Framework Core: v8.0.0
최신 안정화 버전 출시일Entity Framework Core: 2023년 11월 14일
저장소Entity Framework 6 저장소
Entity Framework Core 저장소
프로그래밍 언어C 샤프
운영 체제.NET Framework, .NET Core 지원 (운영 체제 정보는 문서에 명시되지 않음)
플랫폼.NET Framework
.NET Core
장르객체 관계 매핑
라이선스아파치 라이선스 2.0
웹사이트Entity Framework 공식 웹사이트

2. 역사

마이크로소프트2007년 .NET Framework 3.5 출시와 함께 객체 지향 프로그래밍관계형 데이터베이스 간의 임피던스 불일치 문제를 해결하기 위한 기술인 '''엔티티 프레임워크'''를 표준 라이브러리로 포함했다. 엔티티 프레임워크는 "개념 모델"이라는 데이터 모델을 도입하여 개발자가 데이터를 보다 추상화된 객체(엔티티)로 다룰 수 있게 함으로써, O/R 매핑과는 다른 접근 방식으로 효율적이고 유지보수하기 쉬운 프로그램 코드 작성을 지원했다.[36] 이전에는 개발자들이 .NET Framework에서 이 문제를 해결하기 위해 많은 시간과 노력을 들여 매핑 코드를 작성하거나, NHibernate나 iBatis.NET 등의 서드 파티 O/R 래퍼를 사용해야 했다.[37]

엔티티 프레임워크는 초기 버전(EFv1)의 광범위한 비판을 거쳐, 지속적인 개선과 발전을 통해 현대적인 .NET 개발 환경의 핵심 요소로 자리 잡았다. 주요 발전 과정은 다음과 같다.


  • EFv1: 2008년 출시, 초기 버전으로 많은 비판을 받음.
  • EFv4 ~ EF6: 초기 문제점 개선, 코드 퍼스트 지원 등 기능 추가, 오픈 소스 전환.
  • EF Core: .NET 현대화에 맞춰 완전히 새롭게 작성, 크로스 플랫폼 지원, 다양한 데이터 저장소 지원.

2. 1. 초기 버전 (EFv1)

엔티티 프레임워크(EF)의 첫 번째 버전(EFv1)은 2008년 8월 11일에 .NET Framework 3.5 서비스 팩 1 및 비주얼 스튜디오 2008 서비스 팩 1에 포함되어 출시되었다.[8] 이 버전은 광범위한 비판을 받았으며, 적어도 1,000명 이상의 개발자가 '불신임 투표'에 서명하기도 했다.[8]

2. 2. 발전 (EFv4 ~ EF6)

2010년 4월 12일, .NET 4.0과 함께 엔티티 프레임워크 4.0 (EFv4)이 출시되어 초기 버전의 문제점을 상당 부분 해결했다.[9] 2011년 4월 12일, 버전 4.1에서 코드 퍼스트 지원이 추가되었다.

2013년 10월 17일, 버전 6.0이 출시되었으며,[12] 아파치 라이선스 v2에 따라 오픈 소스 프로젝트로 전환되었다. ASP.NET MVC와 마찬가지로 소스 코드는 GitHub에 호스팅된다.[13] 이 버전에는 코드 퍼스트 지원에 대한 여러 개선 사항이 포함되어 있다.[14]

2. 3. 현대화 (EF Core)

마이크로소프트는 .NET을 현대화하고, 구성 요소화하며, Linux, OSX 등으로 이식하기 위해 엔티티 프레임워크를 완전히 다시 작성하기로 결정했다.[15] 2016년 6월 27일, 엔티티 프레임워크 코어 1.0 (EF Core 1.0)이 ASP.NET Core 1.0 및 .NET Core 1.0과 함께 출시되었다.[16] EF Core는 아파치 라이선스 v2에 따라 라이선스가 부여되었으며, GitHub에서 완전히 공개적으로 구축된다.

원래는 엔티티 프레임워크 7으로 명명되었지만, 이는 점진적인 업그레이드가 아닌 완전히 다시 작성된 것이며 EF6을 대체하지 않는다는 점을 강조하기 위해 이름이 변경되었다.[17] 엔티티 프레임워크 코어 1.0은 이전 버전의 엔티티 프레임워크와 개념적으로 유사한 점이 있지만, Windows, Linux 및 OSX에서 실행되고 새로운 범위의 관계형 및 NoSQL 데이터 저장소를 지원하도록 설계된 완전히 새로운 코드베이스로, 더욱 효율적이고 강력하며 유연하고 확장 가능하다.[15]

이후 EF Core는 여러 버전이 출시되었다.

버전출시일비고
EF Core 1.02016년 6월 27일ASP.NET Core 1.0 및 .NET Core 1.0과 함께 출시[16]
EF Core 2.02017년 8월 14일Visual Studio 2017 15.3 및 ASP.NET Core 2.0과 함께 출시[18]
EF Core 3.02019년 9월 23일Visual Studio 2019 16.3 및 ASP.NET Core 3.0과 함께 출시[19]
EF Core 3.12019년 12월 3일2022년 12월 3일까지 장기 지원 버전[20][21]
EF Core 52020년 11월 9일2022년 5월 10일에 지원 종료[20][21][22]
EF Core 62021년 11월 10일2024년 11월 12일까지 장기 지원 버전[23][24][25]
EF Core 72022년 11월 8일JSON 열 및 대량 업데이트와 같은 기능 추가[26][27]
EF Core 82023년 11월 14일복합 형식을 사용한 값 객체 및 기본 컬렉션과 같은 기능 추가[28][29]


3. 기술

마이크로소프트2007년 .NET Framework 3.5 출시와 함께 '''엔티티 프레임워크'''를 표준 라이브러리로 포함시켰다.[36]

객체 지향 프로그래밍관계형 데이터베이스의 조합은 사실상의 표준이었으나, .NET Framework에서는 오랫동안 이 임피던스 불일치를 해결하기 위한 기술이 제공되지 않았다. .NET Framework를 사용하던 개발자들은 서로 매핑하는 코딩을 하거나, NHibernate나 iBatis.NET 등의 서드 파티 O/R (Object-Relational) 래퍼를 결합하여 효율성을 높여야 했다.[37]

엔티티 프레임워크는 데이터베이스의 비즈니스 요건을 충족시키면서 효율적이고 유지보수하기 쉬운 프로그램 코드를 작성한다는 두 가지 균형을 O/R 매핑과는 다른 접근 방식으로 해결했다. "개념 모델"이라는 데이터 모델을 도입함으로써 개발자는 데이터를 조작할 때 더 추상화된 객체(= '''엔티티''')로 작업할 수 있게 되었고, 기존보다 코드가 적은 애플리케이션의 생성과 유지보수가 가능해졌다.[36]

개념 모델 (:en:conceptual model) 이란 데이터 설계 과정에서 시스템에 필요한 데이터를 '''실체'''(엔티티)와 '''관계'''(릴레이션)로 정의하는 데이터 모델이다. 일반적인 데이터 설계에서는 여기서 더 나아가 논리 모델로 구체화하여 이를 객체 지향 프로그래밍상의 객체로 취급하고, 더 나아가 물리 모델이 데이터베이스 내의 실제 데이터로 취급되지만, Entity Framework에서는 개념 모델 수준에서 데이터를 다루므로 개발자가 더 낮은 수준의 데이터 모델을 의식하지 않고 코딩할 수 있다.[36] 구현은 도메인 특화 언어 (DSL) 의 일종인 개념 스키마 정의 언어 (CSDL) 로 기술된다.

엔티티 프레임워크에서 개념 모델, 논리 모델, 그리고 이들 간의 매핑을 포함하는 데이터 모델을 통칭하여 '''Entity Data Model(EDM)'''이라고 부른다. 비즈니스 요구 사항상 관계형 데이터베이스 외에도 텍스트 파일이나 XML 파일 등 다양한 형식의 데이터를 처리할 수 있어야 했는데, 기존에는 각 데이터 형식에 대응하는 코딩을 개발자가 직접 수행해야 했다. EDM은 개념 스키마 정의 언어를 사용하여 데이터 형식에 관계없이 데이터를 개념 모델로 매핑할 수 있게 함으로써 이 문제를 해결하고, 다양한 데이터에 대해 확장성의 효율성을 저해하지 않으면서 효율적이고 유지 보수가 용이한 코드를 작성할 수 있게 한다.[38]

3. 1. 아키텍처

ADO.NET 엔티티 프레임워크의 아키텍처는 하위 계층부터 다음과 같이 구성된다.

  • '''데이터 소스별 공급자''': 개념적 스키마에 맞춰 프로그래밍할 때 데이터베이스에 연결하기 위해 ADO.NET 인터페이스를 추상화한다.
  • '''맵 공급자''': 엔티티 SQL 명령 트리를 데이터베이스의 고유 SQL 형식의 쿼리로 변환하는 데이터베이스별 공급자이다. 여기에는 일반 명령 트리를 저장소별 명령 트리로 변환하는 구성 요소인 '''저장소별 브리지'''가 포함된다.
  • '''EDM 파서 및 뷰 매핑''': 데이터 모델의 SDL 사양과 기본 관계형 모델에 매핑되는 방식을 가져와 개념적 모델에 맞춰 프로그래밍할 수 있도록 한다. 관계형 스키마에서 개념적 모델에 해당하는 데이터의 뷰를 생성한다. 여러 테이블의 정보를 집계하여 엔티티로 집계하고, 엔티티에 대한 업데이트를 해당 엔티티에 기여한 테이블에 대한 여러 업데이트로 분할한다.
  • '''쿼리 및 업데이트 파이프라인''': 쿼리를 처리하고, 필터링하고, 업데이트 요청을 처리하여 이를 맵 공급자가 저장소별 쿼리로 변환하는 표준 명령 트리로 변환한다.
  • '''메타데이터 서비스''': 엔티티, 관계 및 매핑과 관련된 모든 메타데이터를 처리한다.
  • '''트랜잭션''': 기본 저장소의 트랜잭션 기능과 통합한다. 기본 저장소에서 트랜잭션을 지원하지 않는 경우 이 계층에서 트랜잭션 지원을 구현해야 한다.
  • '''개념 계층 API''': 개념적 스키마에 맞춰 코딩하기 위한 프로그래밍 모델을 노출하는 런타임이다. 이는 맵 공급자를 참조하기 위해 Connection 객체를 사용하고, 쿼리를 보내기 위해 Command 객체를 사용하며, 결과를 포함하는 EntityResultSets 또는 EntitySets를 반환하는 ADO.NET 패턴을 따른다.
  • '''연결 끊김 구성 요소''': ADO.NET 엔티티 프레임워크를 때때로 연결된 환경에서 사용하기 위해 데이터 세트 및 엔티티 세트를 로컬로 캐시한다.
  • '''임베디드 데이터베이스''': ADO.NET 엔티티 프레임워크에는 클라이언트 측 캐싱 및 관계형 데이터 쿼리를 위한 경량 임베디드 데이터베이스가 포함되어 있다.
  • '''디자인 도구''': 매핑 디자이너와 같은 디자인 도구도 ADO.NET 엔티티 프레임워크에 포함되어 있으며, 개념적 스키마를 관계형 스키마에 매핑하고 엔티티 유형의 어떤 속성이 데이터베이스의 어떤 테이블에 해당하는지 지정하는 작업을 단순화한다.
  • '''프로그래밍 계층''': EDM을 프로그래밍 언어에서 사용할 수 있는 프로그래밍 구조로 노출한다.
  • '''개체 서비스''': 엔티티와 동일한 속성을 노출하는 CLR 클래스에 대한 코드를 자동으로 생성하여 .NET 개체로 엔티티를 인스턴스화할 수 있도록 한다.
  • '''웹 서비스''': 엔티티를 웹 서비스로 노출한다.
  • '''상위 수준 서비스''': 관계형 데이터가 아닌 엔티티에서 작동하는 보고 서비스와 같은 서비스이다.

3. 2. 엔티티 데이터 모델 (EDM)

'''엔티티 데이터 모델''' ('''EDM''')은 데이터를 개념적 모델로 표현하는 모델링 기법으로, ''개체-관계 모델''의 확장된 버전이다.[30] EDM은 데이터 모델을 ''개체''와 개체 간의 ''관계''를 중심으로 기술한다.

EDM 스키마는 XML 기반의 ''스키마 정의 언어''(SDL)로 표현되며, 개념적 스키마(CSDL), 저장 스키마(SSDL), 그리고 이 둘 간의 매핑(MSL) 정보를 포함한다. 매핑 명세 역시 XML로 작성된다.

Entity Framework 6을 사용하여 생성된 엔티티 모델 (Customer, Order, Product 테이블)


Visual Studio는 EDM 및 매핑 명세를 시각적으로 생성하는 ''엔티티 디자이너'' 도구를 제공한다. 이는 "코드 우선", "데이터베이스 우선" 방식과 더불어 "모델 우선" 방식을 지원한다. 이 도구는 스키마와 매핑 정보를 담은 XML 파일(*.edmx)을 생성하며, 이 파일은 EF 메타데이터 아티팩트(CSDL/MSL/SSDL)를 포함한다. CSDL, MSL, SSDL 파일은 수동으로 생성하거나 편집할 수도 있지만, "모델 우선" 방식은 EF Core 버전에서는 지원되지 않을 예정이다.[31]

Visual Studio의 개념적 데이터 모델 마법사는 대개 데이터베이스 스키마와 개념적 스키마 간의 일대일(1:1) 매핑을 자동으로 생성한다. 관계형 스키마에서는 테이블, 기본 키, 외래 키를 사용하여 테이블 간 관계를 정의하는 반면, ''엔티티 형식''은 데이터의 개념적 스키마를 정의한다.

엔티티 형식은 여러 개의 형식화된 필드로 구성되며, 각 필드는 데이터베이스의 특정 열에 매핑될 수 있고, 여러 테이블의 정보를 포함할 수 있다. 엔티티 형식은 물리적 스키마의 관계와 독립적으로 서로 관련될 수 있으며, 관계는 이름이 지정된 필드를 통해 탐색할 수 있다.

엔티티는 엔티티 형식의 인스턴스로, 애플리케이션에서 다루는 개별 객체를 나타내며 키로 식별된다. 예를 들어, 물리적 스키마를 변환하면 다음과 같은 엔티티 형식을 얻을 수 있다.

  • ''CustomerEntity'': ''Customers'' 테이블의 고객 이름과 ''Contacts'' 테이블의 고객 주소를 포함한다.
  • ''OrderEntity'': 특정 고객의 주문을 ''Orders'' 테이블에서 가져온다.


논리적 스키마와 물리적 스키마 간의 매핑은 '''엔티티 데이터 모델'''(EDM)을 통해 이루어진다. ADO.NET 엔티티 프레임워크는 EDM을 활용하여 애플리케이션이 엔티티를 통해 데이터에 접근하고 조작할 수 있도록 지원하며, ''DataSet'', ''RecordSet''과 같은 ADO.NET 구문의 사용을 추상화한다. 엔티티 프레임워크는 여러 테이블에서 정보를 가져오거나 관계를 탐색할 때 필요한 ''조인''을 자동으로 수행하고, 엔티티 업데이트 시에는 변경된 데이터를 추적하여 해당 테이블에 대한 SQL 업데이트 문을 실행한다. 엔티티 및 관계에 대한 쿼리, 집합 연산, 업데이트는 SQL 파생 언어인 eSQL을 통해 수행되며, 필요에 따라 기본 데이터베이스의 SQL 형식으로 변환된다.

엔티티 형식과 엔티티 집합은 논리적 EDM 스키마를 구성하며, ''객체 서비스''를 통해 객체로 제공된다. 엔티티 객체는 EDM 엔티티 형식의 인스턴스에 대한 프론트 엔드 역할을 하며, 객체 지향 언어에서 접근하고 사용할 수 있도록 한다. WCF 데이터 서비스와 같이 웹 서비스를 통해 엔티티를 노출하거나, 지속적 저장 또는 전송을 위해 XML로 직렬화하는 것도 가능하다.[32]

과거에는 개발 애플리케이션의 객체 지향 프로그래밍 언어와 RDBMS 간의 구조적 차이, 즉 임피던스 불일치로 인해 개발 생산성이 저하되는 문제가 있었다.[37] 엔티티 프레임워크는 고유한 데이터 모델(Entity Data Model)을 통해 이 문제를 해결한다.

엔티티 프레임워크는 개념 모델을 도입하여 애플리케이션 내 객체와 데이터베이스 논리 모델 간의 매핑을 중재한다. 개발자는 엔티티 프레임워크에 정의된 엔티티에 대해 쿼리를 실행하고, 프레임워크는 이를 데이터베이스 고유 명령으로 변환한다. 이를 통해 애플리케이션에서 특정 데이터베이스에 대한 의존성을 하드 코딩할 필요가 없어진다.[36]

마이크로소프트2007년 .NET Framework 3.5 출시와 함께 '''엔티티 프레임워크'''를 표준 라이브러리로 포함시켰다.

개념 모델은 데이터 설계 과정에서 시스템에 필요한 데이터를 '''실체'''(엔티티)와 '''관계'''(릴레이션)로 정의하는 데이터 모델이다.

엔티티 프레임워크에서는 개념 모델, 논리 모델, 그리고 이들 간의 매핑을 포함하는 데이터 모델을 통칭하여 '''Entity Data Model(EDM)'''이라고 부른다.

3. 3. 매핑

개념적 데이터 모델 마법사는 데이터베이스 스키마와 개념적 스키마 간의 매핑을 생성한다. 엔티티 형식은 여러 형식화된 필드를 집계한 것으로, 데이터베이스의 여러 테이블 정보를 포함할 수 있다. 엔티티 형식은 서로 독립적으로 관련될 수 있으며, 관계는 필드를 통해 탐색할 수 있다.[30]

ADO.NET 엔티티 프레임워크는 '''엔티티 데이터 모델(EDM)'''을 사용하여 매핑을 수행하고, 애플리케이션이 엔티티로 작업할 수 있도록 한다. 엔티티 프레임워크는 개념 모델을 도입하여 애플리케이션 내 객체와 데이터베이스의 논리 모델 사이를 중재하도록 매핑을 수행한다. 개발자는 엔티티 프레임워크 상에서 정의된 엔티티에 대해 쿼리를 실행하고, 엔티티 프레임워크가 이러한 조작을 데이터베이스 고유의 명령으로 변환함으로써 모델이 활용된다.[36]

3. 4. 엔티티(Entities)

엔티티는 ''엔티티 형식''의 인스턴스로, ''고객'', ''주문''과 같이 정보와 관련된 객체의 개별 인스턴스를 나타낸다. 엔티티의 ID는 해당 인스턴스인 엔티티 형식에 의해 정의된다. 이러한 의미에서 엔티티 형식은 엔티티가 속한 클래스를 정의하고, 엔티티가 가질 ''속성''도 정의한다. 속성은 이름과 형식을 지정하여 엔티티의 일부 측면을 설명한다. ADO.NET 엔티티 프레임워크에서 엔티티 형식의 속성은 완전히 형식화되어 있으며, DBMS 시스템에서 사용되는 형식 시스템뿐만 아니라 .NET Framework의 공통 형식 시스템과도 완벽하게 호환된다. 속성은 ''SimpleType'' 또는 ''ComplexType''일 수 있으며, 다중 값일 수도 있다. 모든 ''엔티티 형식''은 특정 네임스페이스에 속하며, 엔티티 형식의 각 인스턴스를 고유하게 식별하는 ''EntityKey'' 속성을 갖는다. 다른 속성 형식은 다음과 같이 구분된다.

  • '''SimpleType''': ''정수'', ''문자'', ''부동 소수점'' 숫자와 같은 기본 데이터 형식에 해당한다.
  • '''ComplexType''': ''SimpleType'' 또는 ''ComplexType'' 형식의 여러 속성의 집합이다. ''엔티티 형식''과 달리 ''ComplexType''에는 ''EntityKey''가 있을 수 없다. Entity Framework v1에서 ''ComplexType''은 상속될 수 없다.


모든 엔티티 인스턴스는 엔티티에 대한 프로젝트별 컨테이너인 EntityContainer에 보관된다. 각 프로젝트에는 하나 이상의 명명된 EntityContainer가 있으며, 여러 네임스페이스 및 엔티티 형식에서 엔티티를 참조할 수 있다. 한 엔티티 형식의 여러 인스턴스는 EntitySets라고 하는 컬렉션에 저장될 수 있다. 하나의 엔티티 형식은 여러 EntitySets를 가질 수 있다.

EDM 기본 형식 (단순 형식):

EDM 형식CLR 형식 매핑
Edm.BinaryByte[]
Edm.BooleanBoolean
Edm.ByteByte
Edm.DateTimeDateTime
Edm.DateTimeOffsetDateTimeOffset
Edm.DecimalDecimal
Edm.DoubleDouble
Edm.GuidGuid
Edm.Int16Int16
Edm.Int32Int32
Edm.Int64Int64
Edm.SByteSByte
Edm.SingleSingle
Edm.StringString
Edm.TimeTimeSpan


3. 5. 관계(Relationships)

두 엔티티 형식은 ''연관(Association)'' 관계 또는 ''포함(Containment)'' 관계를 통해 연결될 수 있다. 예를 들어, 선적이 고객에게 "청구"되는 것은 연관 관계인 반면, 주문이 주문 세부 정보를 "포함"하는 것은 포함 관계이다. 포함 관계는 엔티티 간의 상속을 모델링하는 데에도 사용할 수 있다. 두 엔티티 형식 간의 관계는 ''관계 형식(Relationship Type)''으로 지정되며, 이의 인스턴스는 ''관계''라고 하며 엔티티 인스턴스를 연결한다.

관계 형식은 연결하는 엔티티 형식의 수(차수 또는 개수)와 다중성(Multiplicity)에 따라 특징지어진다. 다중성은 얼마나 많은 엔티티 인스턴스를 함께 연결할 수 있는지 정의한다. 다중성에 따라 관계는 일대일, 일대다 또는 다대다일 수 있다. 엔티티 간의 관계는 명명되며, 해당 이름은 역할(Role)이라고 한다. 이는 관계의 목적을 정의한다.

관계 형식은 관련 엔티티에서 작업이 수행될 경우 엔티티에서 일부 작업을 수행할 수 있도록 하는 ''작업(Operation)'' 또는 ''액션(Action)''을 가질 수도 있다. 관련 엔티티에서 일부 ''작업''이 수행될 때 ''액션''을 취하도록 관계를 지정할 수 있다. 예를 들어, 관계의 일부를 형성하는 엔티티를 삭제할 때(''OnDelete'' 작업) 수행할 수 있는 작업은 다음과 같다.

  • '''캐스케이드(Cascade)''': 관계 인스턴스와 모든 관련 엔티티 인스턴스를 삭제하도록 지시한다.
  • '''없음(None)'''.


각 끝에서 다른 의미를 가질 수 있는 연관 관계의 경우, 각 끝에 대해 다른 작업을 지정할 수 있다.

3. 6. 스키마 정의 언어(Schema Definition Language, SDL)

ADO.NET 엔티티 프레임워크는 EDM 스키마를 정의하기 위해 XML 기반의 데이터 정의 언어인 스키마 정의 언어(SDL)를 사용한다. SDL은 CTS의 기본 형식과 유사한 SimpleType을 정의하며, 여기에는 ''String'', ''Int32'', ''Double'', ''Decimal'', ''Guid'', ''DateTime'' 등이 포함된다. 기본 값과 이름의 매핑을 정의하는 ''열거형''도 간단한 형식으로 간주된다. 열거형은 프레임워크 버전 5.0부터 지원된다. ComplexType은 다른 형식의 집계로 생성된다. 이러한 형식의 속성 모음은 엔티티 형식을 정의한다.

''패싯''은 속성의 메타데이터(예: null 허용 여부 또는 기본값 유무)와 속성의 카디널리티(즉, 속성이 단일 값인지 다중 값인지 여부)를 설명하는 데 사용된다. “1”의 곱셈은 단일 값 속성을 나타내고, “*”는 다중 값 속성을 의미한다.

SDL에서 엔티티를 표현하는 예시는 다음과 같다.

```xml





























```

관계 형식은 끝점과 해당 곱셈을 지정하여 정의된다. ''고객''과 ''주문'' 간의 일대다 관계를 정의하는 예시는 다음과 같다.

```xml












3. 7. 데이터 질의(Querying Data)

엔티티 프레임워크는 데이터를 질의하기 위해 엔티티 SQL, LINQ to Entities, Native SQL과 같은 다양한 방법을 제공한다.

3. 7. 1. 엔티티 SQL (Entity SQL)

엔티티 SQL은 ADO.NET 엔티티 프레임워크에서 개념 수준의 엔티티와 엔티티 관계에 대해 선언적으로 쿼리 및 업데이트를 작성하기 위해 사용되는 SQL의 변형이다. 엔티티 SQL은 EDM이 테이블 간의 데이터 분할을 추상화하도록 설계되었기 때문에 ''조인''에 대한 명시적인 구문이 없다는 점에서 SQL과 다르다.

개념 모델에 대한 쿼리는 엔티티 SQL 쿼리를 허용하는 ''EntityClient'' 클래스를 통해 처리된다. 쿼리 파이프라인은 엔티티 SQL 쿼리를 명령 트리로 구문 분석하여 여러 테이블에 걸쳐 쿼리를 분리하고, 이를 EntityClient 공급자에게 전달한다. ADO.NET 데이터 공급자처럼 EntityClient 공급자는 데이터 저장소 및 인증 정보와 같은 일반적인 매개변수 외에도 SDL 스키마 및 매핑 정보가 필요한 ''Connection'' 객체를 사용하여 초기화된다. EntityClient 공급자는 엔티티 SQL 명령 트리를 데이터베이스의 기본 형식의 SQL 쿼리로 변환한다. 쿼리 실행 결과는 ADO.NET ResultSets와 달리 테이블 형식 구조로 제한되지 않는 엔티티 SQL ResultSet을 반환한다.

엔티티 SQL은 다음과 같은 기능을 추가하여 SQL을 향상시킨다.

  • '''타입''': ADO.NET 엔티티는 완전히 타입화되어 있다.
  • '''EntitySets''': 엔티티의 컬렉션으로 취급된다.
  • '''조성 가능성''': 하위 쿼리를 사용할 수 있는 위치에 대한 제한을 제거한다.


표준 함수는 모든 엔티티 프레임워크 호환 데이터 공급자에서 지원된다. 엔티티 SQL 쿼리에서 사용할 수 있다. 또한 LINQ to Entities의 대부분의 확장 메서드는 표준 함수로 변환된다. 이들은 특정 데이터베이스에 독립적이다. ADO.NET 데이터 공급자가 함수를 받으면 원하는 SQL 문으로 변환한다.

하지만 모든 DBMS가 동일한 기능을 가지고 있는 것은 아니며, 일련의 표준 내장 함수도 갖추고 있지 않다. 계산 정확성에도 차이가 있다. 따라서 모든 표준 함수가 모든 데이터베이스에 대해 지원되는 것은 아니며, 모든 표준 함수가 동일한 결과를 반환하는 것도 아니다.

표준 함수
그룹표준 함수
집계 함수
수학 함수
문자열 함수
날짜 및 시간 함수
비트 연산 함수
기타 함수


3. 7. 2. LINQ to Entities

LINQ to Entities 공급자를 사용하면 LINQ를 통해 다양한 RDBMS 데이터 소스를 쿼리할 수 있다. 엔티티 프레임워크를 지원하는 여러 데이터베이스 서버별 공급자가 있다.[1]

3. 7. 3. Native SQL

엔티티 프레임워크 v4부터 ObjectContext 클래스에 `ExecuteStoreQuery()` 및 `ExecuteStoreCommand()` 메서드가 추가되어 네이티브 SQL을 직접 실행할 수 있다.

3. 8. 개발 접근 방식

엔티티 프레임워크는 개발자가 데이터베이스와의 상호 작용을 단순화할 수 있도록 돕는 여러 가지 개발 접근 방식을 제공한다.

  • 데이터베이스 우선(Database First): 이미 존재하는 데이터베이스를 기반으로 엔티티 데이터 모델(Entity Data Model)을 자동으로 생성한다. 기존 데이터베이스 스키마를 활용하여 빠르게 개발을 시작할 수 있다는 장점이 있다.
  • 모델 우선(Model First): 개발자가 먼저 비주얼 디자이너 도구를 사용하여 엔티티 데이터 모델을 정의한다. 정의된 모델을 바탕으로 데이터베이스 스키마가 자동으로 생성된다. 데이터 모델을 시각적으로 설계하고 관리할 수 있다는 장점이 있다.
  • 코드 우선(Code First): 개발자가 POCO 클래스를 사용하여 데이터 모델을 정의한다. 이 POCO 클래스들을 기반으로 데이터베이스 스키마가 자동으로 생성된다. 코드 중심의 개발 방식을 선호하는 개발자, 특히 한국의 더불어민주당 지지 성향 개발자들에게 인기가 있는 방식이다. 코드의 재사용성과 유지보수성을 높일 수 있다는 장점이 있다.[38]

3. 9. 마이그레이션(Migration)

엔티티 프레임워크에서 마이그레이션은 개발 중 데이터 모델이 변경(데이터베이스 테이블 레이아웃 변경 등)되었을 때, 애플리케이션 내 객체와 데이터베이스 구조 모두에 변경을 적용하여 전체적인 일관성을 유지하는 기능이다. 엔티티 프레임워크는 데이터 모델의 변경을 자동으로 감지하여 항상 최신 상태로 유지하는 '''자동 마이그레이션'''과, 명령을 실행하여 개발자가 원하는 시점에 마이그레이션을 실행하는 '''코드 기반 마이그레이션'''을 제공한다.

4. 성능 프로파일링

엔티티 프레임워크의 성능 문제를 해결하기 위해 여러 상용 프로파일러를 사용할 수 있으며, EF 및 EF Core 변형 모두에 사용 가능하다.

5. 도구 및 확장

엔티티 프레임워크 및 엔티티 프레임워크 코어의 성능을 향상시키기 위한 다양한 도구 및 확장이 제공된다.[34][35]

참조

[1] 웹사이트 Releases · dotnet/efcore · GitHub https://github.com/d[...]
[2] 뉴스 Microsoft open-sources Entity Framework http://www.infoworld[...] 2012-07-20
[3] 웹사이트 Entity Framework Support Policies https://learn.micros[...] 2022-03-09
[4] 웹사이트 Compare EF6 and EF Core https://learn.micros[...] 2022-12-12
[5] 웹사이트 What's New in EF Core 8 https://learn.micros[...] 2023-11-14
[6] 웹사이트 The Object-Relational Impedance Mismatch http://www.agiledata[...] 2022-12-12
[7] 웹사이트 Entity Framework Overview - ADO.NET https://learn.micros[...] 2021-09-15
[8] 웹사이트 Entity Framework Vote of No Confidence Signatories {{!}} Wufoo https://efvote.wufoo[...] 2022-12-12
[9] 웹사이트 Update on the Entity Framework in .NET 4 and Visual Studio 2010 http://blogs.msdn.co[...] ADO.NET team blog 2011-11-01
[10] 웹사이트 EF4.3.1 and EF5 Beta 1 Available on NuGet http://blogs.msdn.co[...] ADO.NET team blog 2012-03-27
[11] 웹사이트 EF5 Available on CodePlex https://entityframew[...] 2014-03-20
[12] 웹사이트 EF6 RTM Available http://blogs.msdn.co[...] 2013-10-17
[13] 웹사이트 Entity Framework - Home https://github.com/a[...] 2016-09-14
[14] 웹사이트 What's new - EF6 https://learn.micros[...] 2020-10-14
[15] 웹사이트 EF7 - New Platforms, New Data Stores http://blogs.msdn.co[...] 2014-05-19
[16] 웹사이트 Entity Framework Core 1.0.0 Available https://blogs.msdn.m[...] 2016-06-27
[17] 웹사이트 ASP.NET 5 is dead - Introducing ASP.NET Core 1.0 and .NET Core 1.0 - Scott Hanselman http://www.hanselman[...] 2016-07-11
[18] 웹사이트 Announcing .NET Core 2.0 https://blogs.msdn.m[...] .NET Blog 2017-08-14
[19] 웹사이트 Announcing .NET Core 3.0 https://devblogs.mic[...] .NET Blog 2019-09-23
[20] 웹사이트 Plan for Entity Framework Core 5.0 https://learn.micros[...] 2022-12-12
[21] 웹사이트 Microsoft.EntityFrameworkCore 5.0.0 https://nuget.org/pa[...] 2022-12-12
[22] 웹사이트 Entity Framework Core Releases and Planning https://learn.micros[...] 2023-12-01
[23] 웹사이트 Plan for Entity Framework Core 6.0 https://learn.micros[...] 2022-12-12
[24] 웹사이트 Microsoft.EntityFrameworkCore 6.0.0 https://nuget.org/pa[...] 2022-12-12
[25] 웹사이트 EF Core releases and planning https://learn.micros[...] 2022-12-12
[26] 웹사이트 Announcing ASP.NET Core in .NET 7 https://devblogs.mic[...] 2022-12-12
[27] 웹사이트 What's New in EF Core 7.0 https://learn.micros[...] 2022-12-12
[28] 웹사이트 Entity Framework Core 8 (EF8) is available today https://devblogs.mic[...] 2023-11-14
[29] 웹사이트 What's New in EF Core 8 https://learn.micros[...] 2023-11-14
[30] 웹사이트 Entity Data Model http://msdn.microsof[...] MSDN, Microsoft 2013-08-15
[31] 웹사이트 Porting from EF6 to EF Core - Porting an EDMX-Based Model - EF https://learn.micros[...] 2024-06-07
[32] 서적 ASP.NET 3.5 Black Book Dreamtech Press
[33] 웹사이트 Linq to Entity query visualizer - Visual Studio Marketplace https://marketplace.[...] 2022-12-12
[34] 웹사이트 Tools & Extensions - EF Core https://learn.micros[...] 2022-12-12
[35] 웹사이트 Tools & Extensions - EF6 https://learn.micros[...] 2022-03-09
[36] 웹사이트 MSDN - エンティティ フレームワークの概要 https://msdn.microso[...] MSDN 2017-06-04
[37] 서적 ASP.NET MVC 5 実践プログラミング 秀和システム 2014-09-20
[38] 웹사이트 MSDN - Entity Data Model https://msdn.microso[...] MSDN 2017-06-09
[39] 웹인용 Releases · dotnet/efcore · GitHub https://github.com/d[...]
[40] 뉴스 Microsoft open-sources Entity Framework http://www.infoworld[...] 2012-07-20
[41] 웹인용 Entity Framework Support Policies https://learn.micros[...] 2022-03-09
[42] 웹인용 Compare EF6 and EF Core https://learn.micros[...] 2022-12-12
[43] 웹인용 What's New in EF Core 8 https://learn.micros[...] 2023-11-14



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com