Entity Framework(SQL Server Compact)

Entity Framework는 데이터 기반 소프트웨어 응용 프로그램의 개발을 지원하는 ADO.NET의 한 구성 요소입니다. Entity Framework를 통해 개발자는 고객 및 고객 주소와 같은 데이터를 이 데이터가 저장된 기본 데이터베이스 테이블 및 열과 관계없이 도메인 특정 개체와 속성 형태로 사용할 수 있습니다.

Entity Framework는 개발자가 보다 높은 추상화 수준에서 데이터 작업을 할 수 있도록 하므로 Entity Framework에서는 모든 특정 데이터 저장소 엔진 또는 관계형 스키마와 무관한 코드가 지원됩니다. 개발자는 관계형 저장소 스키마에 대해 직접 프로그래밍하는 대신 개념 응용 프로그램 모델에 대해 프로그래밍하여 데이터 액세스 응용 프로그램을 만들 수 있습니다.

Entity Framework 응용 프로그램 및 서비스는 개념 모델, 저장소 모델, 이 두 모델 간의 매핑으로 구성되어 있습니다. 기존 데이터베이스에서 EDM(엔터티 데이터 모델)을 파생하려는 개발자의 요구 사항을 충족시키기 위해 Entity Framework는 EDM을 만들고 유효성을 검사하며 개념 모델을 기반으로 프로그래밍 가능한 클래스를 만드는 도구 집합을 제공합니다.

ADO.NET은 EDM을 통해 .NET 환경에서 엔터티를 개체로 표시합니다. 이렇게 하면 개체 계층을 LINQ(Language-Integrated Query) 지원에 가장 적합한 대상으로 만듭니다. 개발자는 LINQ to Entity를 사용하여 개발 환경에서 직접 LINQ 식 및 LINQ 표준 쿼리 연산자를 사용하여 Entity Framework 개체 컨텍스트에 대해 강력한 형식의 유연한 쿼리를 만들 수 있습니다. Entity Framework 및 LINQ to Entities에 대한 자세한 내용은 Entity Framework 설명서를 참조하십시오.

SQL Server Compact 4.0부터 SQL Server Compact에서는 웹 응용 프로그램 플랫폼용 Entity Framework에 대한 지원을 제공합니다.

SQL Server Compact의 Entity Framework

Entity Framework에서 SQL Server Compact 4.0을 사용하려면 Entity Framework을 먼저 설치해야 합니다. Entity Framework는 .NET Framework 4의 구성 요소입니다.

SQL Server Compact 4.0에 대한 개발 지원은 Visual Studio 2010 서비스 팩 1에서 제공하고 Visual Studio 2010 서비스 팩 1에서 Entity Framework에 대한 엔터티 데이터 모델 디자이너 지원은 Entity Framework 도구에서 제공합니다. 엔터티 데이터 모델 디자이너(엔터티 디자이너)는 Visual Studio 2008 서비스 팩 1(SP1)부터 Visual Studio의 구성 요소입니다. 이는 EDM(엔터티 데이터 모델)을 만들고 편집하는 데 사용되는 비주얼 도구입니다. 이 도구에 대한 자세한 내용은 Entity Framework 설명서를 참조하십시오.

SQL Server Compact 4.0 릴리스에서 SQL Server Compact는 관리되는 어셈블리인 System.Data.SQLServerCe.Entity.dll을 제공합니다. System.Data.SQLServerCe.Entity.dll 어셈블리는 내부적으로 ADO.NET 관리 데이터 공급자 System.Data.SqlServerCE.dll에서 사용되고 EDM(엔터티 데이터 모델)에서 설명하는 데이터에 대한 액세스를 지원합니다.

SQL Server Compact의 SQL Server Compact 4.0 이상 릴리스(SSCERuntime-ENU.msi)를 설치하면 System.Data.SQLServerCe.Entity.dll이 %ProgramFiles%\Microsoft SQL Server Compact Edition\v4.0 폴더 아래에 설치됩니다.

참고

SQL Server Compact 4.0은 .NET Framework 버전 4의 Entity Framework 4에서만 사용할 수 있습니다. SQL Server Compact 4.0은 .NET Framework 3.5를 지원하지 않으며, 오류가 발생합니다.

코드 우선/코드 전용

SQL Server Compact 4.0은 ADO.NET Entity Framework 4의 코드 우선 프로그래밍 모델을 지원합니다. Entity Framework 웹 응용 프로그램은 데이터베이스 우선모델 우선의 두 가지 방법으로 만들 수 있습니다. 모델 우선은 코드 우선/코드 전용 개발이라고도 부르는 보다 코드 중심적인 개발 워크플로를 가능하게 해주는 ADO.NET Entity Framework 4(.NET Framework 4)의 새로운 기능입니다. 이 워크플로에서는 CODE가 사용자의 모델입니다. 코드 우선 프로그래밍 모델은 다음과 같이 작동합니다.

  • 코드 전용을 사용하려면 몇 가지 POCO(Plain Old CLR Object) 클래스를 만들어야 합니다. 이러한 클래스는 주로 생성자로 구성됩니다.

  • 그런 다음 ObjectContext에서 파생되고 모델 모양과 POCO 클래스 액세스 방식을 설명하는 클래스를 작성합니다. 이 클래스는 Entity Framework 인식 클래스입니다.

이 단계에서 CLR에 필요한 모든 항목이 준비되지만 EDMX 파일에 저장된 Entity Framework 메타데이터가 없으면 ObjectContext 클래스를 사용할 수 없습니다. 코드 전용의 경우 EDMX 파일이 없습니다.

  • 메타데이터를 사용하려면 SqlConnection이 정의된 ContextBuilder를 정의해야 합니다. ContextBuilder는 ObjectContext의 속성을 검색하여 기본 개념 모델, 저장소 모델 및 매핑 조건 규칙을 유추합니다. 그런 다음 메타데이터와 사용자가 ContextBuilder를 통해 전달한 SqlConnection을 사용하여 EntityConnection을 만듭니다.

  • 그 다음에는 POCO 클래스에서 생성된 생성자에 EntityConnection을 전달하여 ObjectContext 인스턴스가 만들어집니다.

  • 컨텍스트 인스턴스를 만든 후에는 다음과 같은 기능의 여러 확장 메서드를 사용할 수 있습니다.

    1. 데이터베이스 스크립트를 자동으로 만들기

    2. 데이터베이스가 존재하는지 확인

    3. 데이터베이스 만들기

    4. 데이터베이스 삭제 등

규칙을 사용하는 대신 이를 재정의할 수도 있습니다. Entity Framework 4에서 ContextBuilder는 ModelBuilder 및 DbModel에 리팩터링되었습니다.

다운로드하려면 ADO.NET Entity Framework 4을 참조하십시오.

SQL Server Compact 제한 사항

Entity Framework와 함께 사용되는 SQL Server Compact에 대한 제한 사항은 다음과 같습니다.

  • SQL Server Compact 4.0는 Entity Framework와 함께 사용될 때 키 유형이 ID 열인 경우에만 서버 생성 키 또는 값을 포함하는 엔터티를 지원합니다.

    Entity Framework를 사용할 때 엔터티의 키는 서버 생성 키로 표시될 수 있습니다. 이에 따라 데이터베이스가 삽입 또는 엔터티 생성 시 키의 값을 생성할 수 있습니다. 또한 0개 이상의 엔터티 속성이 서버 생성 값으로 표시될 수 있습니다. 자세한 내용은 Entity Framework 설명서의 저장소 생성 패턴(Store Generated Pattern) 항목을 참조하십시오.

    Entity Framework를 사용하면 서버 생성 키 또는 값을 포함하는 엔터티 유형을 정의할 수 있습니다. Identity 유형 이외의 서버 생성 값을 포함하는 엔터티에서 데이터 조작 작업을 수행하면 "지원되지 않음" 예외가 발생합니다.

  • SQL Server Compact 스키마에 중복되는 제약 조건 이름이 있을 경우 SQL Server Compact 4.0에 대한 엔터티 데이터 모델이 생성되지 않습니다.

    SQL Server Compact에서 테이블 내에서 고유한 제약 조건 이름을 사용해야 데이터베이스에서 중복된 제약 조건 이름을 사용할 수 있습니다. SQL Server에서는 이와 다른 방식이 적용됩니다. 전체 데이터베이스에 고유한 제약 조건 이름이 사용됩니다. SQL Server Compact 4.0 스키마가 중복된 참조 무결성(기본 키 - 외래 키 관계)을 가진 제약 조건 이름이 있는 경우 ADO.NET Entity Framework의 엔터티 데이터 모델 마법사를 사용하여 엔터티 데이터 모델을 생성할 수 없습니다. 제약 조건 이름에 테이블 이름을 추가하는 등의 방법으로 전체 데이터베이스에서 제약 조건 이름을 항상 고유하게 유지해야 합니다.

  • Entity SQL이 완전 외부 조인을 지원해도 SQL Server Compact는 Entity Framework를 사용하는 완전 외부 조인을 지원하지 않습니다. 예를 들어 다음 쿼리는 지원되지 않습니다.

    Entity SQL:

    SELECT c.Name, c.Id, o.Id 
    FROM NW.Customers AS c 
    FULL OUTER JOIN NW.Orders AS o ON c.Id = o.CustomerId
    

    SQL Server Compact는 Entity Framework를 사용하는 내부 조인, 왼쪽 우선 외부 조인 및 오른쪽 우선 외부 조인을 지원합니다.

  • SQL Server Compact는 Entity SQL 쿼리의 ORDER BY 절에서 COLLATE 하위 절을 지원하지 않습니다.

    Entity SQL을 통해 COLLATE 하위 절을 ORDER BY 절에 있는 각 키의 일부로 지정할 수 있습니다. COLLATE 하위 절은 문자열 값 식에 대해서만 적용되며 해당 식에 사용할 비교 의미 체계를 확인합니다.

    SQL Server Compact는 Entity Framework와 함께 사용될 때 Entity SQL 쿼리의 ORDER BY 절에 COLLATE 하위 절을 사용하는 기능을 지원하지 않습니다. 예를 들어 다음 쿼리는 지원되지 않습니다.

    Entity SQL:

    SELECT value c 
    FROM NW.Customers AS c 
    ORDER BY c.Name COLLATE Traditional_Spanish_ci_ai 
    
  • SQL Server와 달리 SQL Server Compact는 real, float, money 및 numeric 데이터 형식에서 %로 표시되는 모듈로를 지원하지 않습니다.

    SQL Server Compact에서 다음 쿼리는 오류 메시지를 발생시킵니다.

    Entity SQL:

    ( CAST ( 1 AS Edm.Int16) % CAST ( 1 AS Edm.Decimal) ) 
    

    Transact-SQL:

    SELECT cast (1 as smallint) %cast (1 as decimal(28,4)) 
    

    이러한 쿼리를 실행할 때 다음과 같은 오류 메시지가 표시됩니다. "real, float, money 및 numeric 데이터 형식에는 모듈로가 지원되지 않습니다. [ Data type = numeric ]"

  • SQL Server Compact는 집계(max, min, sum, count)에서 DISTINCT를 지원하지 않습니다.

    집계(max, min, sum, count)에서 DISTINCT를 사용하는 Entity SQL 및 Transact-SQL 쿼리를 작성할 경우 "지원되지 않음" 예외가 발생합니다. 다음 예에서는 집계 count에서 DISTINCT를 사용하는 Entity SQL 쿼리를 보여 줍니다.

    Entity SQL:

    SELECT count(distinct [TaskId]) FROM ArubaContainer.TaskSet AS [Task]
    
  • SQL Server Compact는 Entity Framework와 함께 사용될 때 명령 제한 시간을 지원하지 않습니다.

    Entity Framework는 ObjectContext.QueryTimeout 속성 또는 EntityCommand.CommandTimeout 속성을 사용하여 명령 제한 시간을 지정합니다.

    SQL Server Compact는 Entity Framework와 함께 사용될 때 제한 시간을 지원하지 않습니다. 즉, 명령 제한 시간을 0 이외의 값으로 설정할 수 없습니다. 연결 제한 시간 속성을 설정하면 SQL Server Compact 데이터베이스에서 NotSupportedException(“CommandTimeout”) 예외를 발생시킵니다.

  • SQL Server Compact는 유니코드 문자열만 지원합니다.

    Entity Framework는 유니코드 문자열과 유니코드가 아닌 문자열 모두에 대한 지원을 제공합니다. SQL Server Compact는 유니코드 문자열만 지원합니다. 현재 공급자에서는 'String' 유형의 리터럴 <literal>이 지원되지 않습니다. 유니코드가 아닌 문자열에서 SQL Server Compact에 의해 "상수 리터럴 근처" 예외가 발생합니다.

  • SQL Server Compact는 저장 프로시저 및 뷰를 지원하지 않습니다.

SQL Server Compact 데이터베이스를 데이터 원본으로 사용하는 Entity Framework 응용 프로그램을 만드는 방법은 Entity Framework 응용 프로그램 만들기(SQL Server Compact)를 참조하십시오.

참고 항목

관련 자료

관리되는 응용 프로그램 빌드(SQL Server Compact)