다음을 통해 공유


Entity Framework 6로 업그레이드

이전 EF 버전에서는 코드가 .NET Framework의 일부로 제공되는 코어 라이브러리(주로 System.Data.Entity.dll)와 NuGet 패키지로 제공되는 OOB(대역 외) 라이브러리(주로 EntityFramework.dll)로 구분되어 있었습니다. EF6는 코어 라이브러리에서 코드를 가져와서 OOB 라이브러리에 통합합니다. 이는 EF가 오픈 소스가 되고 .NET Framework와 차별화된 속도로 진화하기 위해 필요했습니다. 이로 인해 이동된 형식에 맞게 애플리케이션을 다시 빌드해야 합니다.

EF 4.1 이상에 제공되는 DbContext를 사용하는 애플리케이션의 경우에는 간단합니다. ObjectContext를 활용하는 애플리케이션에는 추가 작업이 조금 더 필요하지만 크게 어려워지지 않습니다.

다음은 기존 애플리케이션을 EF6로 업그레이드하기 위해 필요한 항목을 보여주는 검사 목록입니다.

1. EF6 NuGet 패키지 설치

새 Entity Framework 6 런타임으로 업그레이드해야 합니다.

  1. 프로젝트를 마우스 오른쪽 단추로 클릭하고 NuGet 패키지 관리...를 선택합니다.
  2. 온라인 탭에서 EntityFramework를 선택하고 설치를 클릭합니다.

    참고 항목

    이전 버전의 EntityFramework NuGet 패키지가 설치되어 있는 경우에는 EF6로 업그레이드됩니다.

또는 패키지 관리자 콘솔에서 다음 명령을 실행해도 됩니다.

Install-Package EntityFramework

2. System.Data.Entity.dll에 대한 어셈블리 참조가 제거되었는지 확인

EF6 NuGet 패키지를 설치하면 프로젝트에서 System.Data.Entity에 대한 참조가 자동으로 제거됩니다.

3. EF Designer(EDMX) 모델을 교환하여 EF 6.x 코드 생성 사용

EF Designer를 사용하여 만든 모델이 있는 경우 코드 생성 템플릿을 업데이트하여 EF6 호환 코드를 생성해야 합니다.

참고 항목

현재는 Visual Studio 2012 및 2013에서 사용할 수 있는 EF 6.x DbContext 생성기 템플릿만 지원됩니다.

  1. 기존 코드 생성 템플릿을 삭제합니다. 이러한 파일의 이름은 일반적으로 <edmx_file_name>.tt<edmx_file_name>.Context.tt이며 솔루션 탐색기의 edmx 파일 아래에 중첩됩니다. 솔루션 탐색기에서 템플릿을 선택하고 Del 키를 눌러 삭제할 수 있습니다.

    참고 항목

    웹 사이트 프로젝트에서는 템플릿이 edmx 파일 아래에 중첩되지 않고 솔루션 탐색기에 함께 나열됩니다.

    참고 항목

    VB.NET 프로젝트에서 중첩된 템플릿 파일을 보려면 '모든 파일 표시'를 사용하도록 설정해야 합니다.

  2. 적절한 EF 6.x 코드 생성 템플릿을 추가합니다. EF Designer에서 모델을 열고 디자인 화면을 마우스 오른쪽 단추로 클릭하고 코드 생성 항목 추가...를 선택합니다.

    • DbContext API(권장)를 사용하는 경우 데이터 탭에서 EF 6.x DbContext 생성기를 사용할 수 있습니다.

      참고 항목

      Visual Studio 2012를 사용하는 경우에는 EF 6 도구를 설치해야 이 템플릿을 사용할 수 있습니다. 자세한 내용은 Entity Framework 가져오기를 참조하세요.

    • ObjectContext API를 사용하는 경우 온라인 탭을 선택하고 EF 6.x EntityObject 생성기를 검색해야 합니다.

  3. 코드 생성 템플릿에 사용자 지정을 적용한 경우 업데이트된 템플릿에 다시 적용해야 합니다.

4. 사용 중인 코어 EF 형식의 네임스페이스 업데이트

DbContext 및 Code First 형식의 네임스페이스는 변경 사항이 없습니다. 즉, EF 4.1 이상을 사용하는 여러 애플리케이션에서는 아무것도 변경할 필요가 없습니다.

기존의 System.Data.Entity.dll에 있던 ObjectContext와 같은 형식이 새 네임스페이스로 이동되었습니다. 따라서 EF6에 대해 빌드하려면 using 또는 Import 지시문을 업데이트해야 할 수도 있습니다.

네임스페이스 변경에 대한 일반 규칙은 System.Data.*의 모든 형식이 System.Data.Entity.Core.*로 전환된다는 것입니다. 다시 말해서, System.Data 뒤에 Entity.Core.가 삽입됩니다. 예시:

  • System.Data.EntityException => System.Data.Entity.Core.EntityException
  • System.Data.Objects.ObjectContext => System.Data.Entity.Core.Objects.ObjectContext
  • System.Data.Objects.DataClasses.RelationshipManager => System.Data.Entity.Core.Objects.DataClasses.RelationshipManager

이러한 형식은 대부분의 DbContext 기반 애플리케이션에 직접 사용되지 않으므로 Core 네임스페이스에 있습니다. System.Data.Entity.dll의 일부인 특정 형식은 계속 DbContext 기반 애플리케이션에 직접 사용되는 경우가 많으므로 Core 네임스페이스로 이동되지 않았습니다. 이는 다음과 같습니다.

  • System.Data.EntityState => System.Data.Entity.EntityState
  • System.Data.Objects.DataClasses.EdmFunctionAttribute => System.Data.Entity.DbFunctionAttribute

    참고 항목

    이 클래스의 이름이 변경되었습니다. 이전 이름의 클래스도 계속 존재하며 작동하지만 이제 사용되지 않는 것으로 표시됩니다.

  • System.Data.Objects.EntityFunctions => System.Data.Entity.DbFunctions

    참고 항목

    이 클래스의 이름이 변경되었습니다. 이전 이름의 클래스도 계속 존재하며 작동하지만 이제 사용되지 않는 것으로 표시됩니다.

  • 공간 클래스(예: DbGeography, DbGeometry)가 System.Data.Spatial => System.Data.Entity.Spatial에서 이동되었습니다.

참고 항목

System.Data 네임스페이스의 일부 형식은 EF 어셈블리가 아닌 System.Data.dll에 있습니다. 해당 형식은 이동되지 않았으므로 네임스페이스는 변경되지 않은 상태로 유지됩니다.