다음을 통해 공유


연습: EDMX 스키마 파일에서 F# 형식 생성(F#)

F# 3.0에 대한 이 연습에서는 .edmx 파일에 지정된 스키마인 EDM(엔터티 데이터 모델)으로 표시하는 데이터 형식을 만드는 방법을 보여 줍니다.또한 이 연습에서는 EdmxFile 형식 공급자를 사용하는 방법을 보여줍니다.시작하기 전에 SqlEntityConnection 형식 공급자가 보다 적절한 형식 공급자 옵션인지 고려합니다.SqlEntityConnection 형식 공급자는 프로젝트 개발 단계 동안 연결할 수 있는 라이브 데이터베이스가 있는 시나리오에 가장 적합하며 컴파일 타임에 연결 문자열을 지정해도 됩니다.그러나 이 형식 공급자는 EdmxFile 형식 공급자만큼 많은 데이터베이스 기능을 노출하지 않는다는 제한이 있습니다.또한 엔터티 데이터 모델을 사용하는 데이터베이스 프로젝트에 대한 라이브 데이터베이스 연결이 없는 경우 .edmx 파일을 사용하여 데이터베이스를 코딩할 수 있습니다.EdmxFile 형식 공급자를 사용하면 F# 컴파일러에서 Edmgen.exe를 실행하여 여기에서 제공하는 형식을 생성합니다.

이 연습에는 다음 작업을 보여 줍니다. 이 경우 연습을 성공적으로 수행하기 위해 이 순서대로 수행해야 합니다.

  • Creating an EDMX file

  • Creating the project

  • Finding or creating the entity data model connection string

  • Configuring the type provider

  • Querying the data

  • Calling a stored procedure

EDMX 파일 만들기

EDMX 파일이 이미 있는 경우 이 단계를 건너뛸 수 있습니다.

EDMX 파일을 만들려면

  • EDMX 파일이 없다면 ADO.NET 엔터티 프레임워크 퀵스타트에 있는 데이터베이스에서 엔터티 데이터 모델 및 EDMX 파일을 만들기 위한 지시를 따르십시오.그 대신에 이 To configure the Entity Data Model 단계에서 실행하는 작업 중 마지막에 있는 지시를 참조할 수 있습니다 .

프로젝트 만들기

이 단계에서 EDMX 형식 공급자를 사용하려면 프로젝트를 만들고 적절한 참조를 추가합니다.

F# 프로젝트를 만들고 설정하는 방법

  1. 이전 프로젝트를 닫고 SchoolEDM이라는 새 프로젝트를 만듭니다.

  2. 솔루션 탐색기에서 참조의 바로 가기 메뉴를 열고 참조 추가를 선택합니다.

  3. 어셈블리 영역에서 프레임워크 노드를 선택합니다.

  4. 사용할 수 있는 어셈블리 목록에서 System.Data.EntitySystem.Data.Linq 어셈블리를 선택한 추가 버튼을 선택하여 이러한 어셈블리와 프로젝트에 참조를 추가합니다.

  5. 어셈블리 영역에서 확장 노드를 선택합니다.

  6. 사용 가능한 확장 목록에서 FSharp.Data.TypeProviders 어셈블리에 대한 참조를 추가합니다.

  7. 다음 코드를 추가하여 적절한 네임스페이스를 엽니다.

    open System.Data.Linq
    open System.Data.Entity
    open Microsoft.FSharp.Data.TypeProviders
    

엔터티 데이터 모델에 대한 연결 문자열을 찾거나 생성

엔터티 데이터 모델(EDMX 연결 문자열)은 데이터베이스 공급자 연결 문자열 뿐만 아니라 추가 정보를 포함하는 연결 문자열입니다.예를 들어, 간단한 SQL Server 데이터베이스의 경우 EDMX 연결 문자열은 다음 코드와 유사합니다.

let edmConnectionString = "metadata=res://*/;provider=System.Data.SqlClient;Provider Connection String='Server=SERVER\Instance;Initial Catalog=DatabaseName;Integrated Security=SSPI;'"

EDMX 연결 문자열에 대한 자세한 내용은 Connection Strings를 참조하십시오.

엔터티 데이터 모델에 대한 연결 문자열을 찾거나 만들려면

  • EDMX 연결 문자열을 직접 생성하는 것은 어려울 수 있으므로 프로그래밍 방식으로 생성하여 시간을 절약할 수 있습니다.EDMX 연결 문자열을 알고 있는 경우 이 단계를 건너뛰고 다음 단계에서 해당 연결 문자열을 사용할 수 있습니다.그렇지 않으면 다음 코드를 사용하여 사용자가 제공하는 데이터베이스 연결 문자열에서 EDMX 연결 문자열을 생성합니다.

    open System
    open System.Data
    open System.Data.SqlClient
    open System.Data.EntityClient
    open System.Data.Metadata.Edm
    
    let getEDMConnectionString(dbConnectionString) =
        let dbConnection = new SqlConnection(connectionString)
        let resourceArray = [| "res://*/" |]
        let assemblyList = [| System.Reflection.Assembly.GetCallingAssembly() |]
        let metaData = MetadataWorkspace(resourceArray, assemblyList)
        new EntityConnection(metaData, dbConnection)
    

형식 공급자를 구성

이 단계에서는 EDMX 연결 문자열로 형식 공급자를 만들고 구성하며 .edmx 파일에 정의된 스키마에 대해 형식을 생성합니다.

형식 공급자를 구성하고 형식을 생성하는 방법

  1. 이 연습의 첫 번째 단계에서 생성되는 .edmx 파일을 프로젝트 폴더에 복사합니다.

  2. F# 프로젝트에서 프로젝트 노드에 대한 바로 가기 메뉴를 열기고 기존 항목 추가를 선택한 다음 프로젝트에 추가할 .edmx 파일을 선택합니다.

  3. .edmx 파일의 형식 공급자를 활성화하려면 다음 코드를 입력합니다.Server\Instance를 SQL Server를 실행하는 서버 이름 및 해당 인스턴스 이름으로 바꾸고 이 연습의 첫 단계에 있는 .edmx 파일의 이름을 사용합니다.

    type edmx = EdmxFile<"Model1.edmx", ResolutionFolder = @"<folder that contains your .edmx file>>
    
    let edmConnectionString =
        getEDMConnectionString("Data Source=SERVER\instance;Initial Catalog=School;Integrated Security=true;")
    let context = new edmx.SchoolModel.SchoolEntities(edmConnectionString)
    

데이터를 쿼리하고 있습니다.

이 단계에서는 F# 쿼리 식을 사용하여 데이터베이스를 쿼리합니다.

데이터에 쿼리하는 방법

  • 엔터티 데이터 모델의 데이터를 쿼리하려면 다음 코드를 입력합니다.

    query { for course in context.Courses do
            select course }
    |> Seq.iter (fun course -> printfn "%s" course.Title)
    
    query { for person in context.Person do
            select person }
    |> Seq.iter (fun person -> printfn "%s %s" person.FirstName person.LastName)
    
    // Add a where clause to filter results
    query { for course in context.Courses do
            where (course.DepartmentID = 1)
            select course)
    |> Seq.iter (fun course -> printfn "%s" course.Title)
    
    // Join two tables
    query { for course in context.Courses do
            join (for dept in context.Departments -> course.DepartmentID = dept.DepartmentID)
            select (course, dept.Name) }
    |> Seq.iter (fun (course, deptName) -> printfn "%s %s" course.Title deptName)
    

저장 프로시저 호출

EDMX 형식 공급자를 사용하여 저장 프로시저를 호출할 수 있습니다.다음 프로시저에서 School 데이터베이스에는 열의 새 값이 있을 때 업데이트하는 저장 프로시저 UpdatePerson이 포함되어 있습니다.DataContext 형식의 메서드로 노출되기 때문에 이 저장된 프로시저를 사용할 수 있습니다.

저장된 프로시저를 호출하는 방법

  • 다음 코드를 추가하여 레코드를 업데이트합니다.

    // Call a stored procedure.
    let nullable value = new System.Nullable<_>(value)
    
    // Assume now that you must correct someone's hire date.
    // Throw an exception if more than one matching person is found.
    let changeHireDate(lastName, firstName, hireDate) =
    
        query { for person in context.People do
                where (person.LastName = lastName &&
                       person.FirstName = firstName)
                exactlyOne }
        |> (fun person ->
                context.UpdatePerson(nullable person.PersonID, person.LastName,
                    person.FirstName, nullable hireDate, person.EnrollmentDate))
    
    changeHireDate("Abercrombie", "Kim", DateTime.Parse("1/12/1998"))
    |> printfn "Result: %d"
    

    성공한다면 결과는 1입니다.exactlyOne는 한 결과만 반환되도록 쿼리 식에 사용됩니다. 그렇지 않으면 예외가 throw됩니다.또한 null을 허용하는 값으로 보다 손쉽게 작업하기 위해 이 코드에 정의된 간단한 nullable 함수를 사용하여 일반 값에서 null을 허용하는 값을 만들 수 있습니다.

엔터티 데이터 모델을 구성

데이터베이스에서 전체 엔터티 데이터 모델을 생성하는 방법을 알고 싶고 테스트할 데이터베이스가 없는 경우에만 이 절차를 완료할 필요가 있습니다.

엔터티 데이터 모델을 구성하는 방법

  1. 메뉴 모음에서 SQL, Transact-SQL 편집기, 새 쿼리를 선택하여 데이터베이스를 만듭니다.메시지가 나타나면 데이터베이스 서버 및 인스턴스를 지정합니다.

  2. Creating the School Sample Database가 설명한 것처럼 학생 데이터베이스를 만드는 데이터베이스 스크립트의 내용을 복사하고 붙여 넣습니다.

    이 연습의 다음 단계는 ADO.NET Entity Data Model Quickstart를 기반으로 합니다.

  3. 도구 모음 아이콘을 삼각형 기호와 함께 선택하거나 Ctrl+Q 키를 선택하여 SQL 스크립트를 실행합니다.

  4. 서버 탐색기에서 데이터 연결의 바로 가기 메뉴를 열고 추가 연결을 선택한 다음 데이터베이스 서버 이름, 인스턴스 이름 및 학교 데이터베이스 이름을 입력합니다.

  5. C# 또는 Visual Basic 콘솔 응용 프로그램 프로젝트를 만들고, 바로 가기 메뉴를 열고, 새 항목 추가를 선택한 다음, ADO.NET 엔터티 데이터 모델을 선택합니다.

    엔터티 데이터 모델 마법사가 열립니다.이 마법사를 사용하면 엔터티 데이터 모델을 생성하는 방법을 선택할 수 있습니다.

  6. Model 콘텐츠 선택 에서 데이터베이스에서 생성 확인란을 선택합니다.

  7. 다음 페이지에서 새로 만든 School 데이터베이스를 데이터 연결로 선택합니다.

    이 연결은 <servername>.<instancename>.School.dbo와 유사해야 합니다.

  8. 엔터티 연결 문자열은 나중에 중요할 수 있으므로 클립보드에 복사합니다.

  9. 엔터티 연결 문자열을 App.Config 파일에 저장하는 확인란이 선택되었는지 확인하고 필요할 경우 연결 문자열을 찾을 수 있는 텍스트 상자의 문자열 값을 기록합니다.

  10. 다음 페이지에서 테이블저장 프로시저 및 함수를 선택합니다.

    이러한 최상위 노드를 선택하여 테이블, 저장 프로시저 및 함수를 모두 선택합니다.원할 경우 개별적으로 선택할 수도 있습니다.

  11. 다른 설정의 확인란이 선택되어 있는지 확인합니다.

    첫 번째 생성된 개체 이름 복수 또는 단수로 바꾸기 확인란은 데이터베이스 테이블을 나타내는 명명 개체의 규칙과 일치하도록 단수 형식을 복수로, 복수 형식을 단수로 변경할지 여부를 나타냅니다.모델에 외래 키 열 포함 확인란은 데이터베이스 스키마를 위해 생성된 개체 형식의 다른 필드에 조인하기 위한 필드를 포함할지 여부를 결정합니다.세 번째 확인란은 모델에 저장된 프로시저 및 함수를 포함하는지 여부를 나타냅니다.

  12. School 데이터베이스를 기반으로 엔터티 데이터 모델을 포함하는 .edmx 파일을 생성하려면 마침 단추를 선택합니다.

    Model1.edmx 파일이 프로젝트에 추가되어 데이터베이스 다이어그램이 나타납니다.

  13. 메뉴 모음에서 보기, 다른 창, 엔터티 데이터 모델 브라우저를 선택하여 모델의 모든 세부 사항을 보거나 엔터티 데이터 모델 매핑 정보를 선택하여 생성된 개체 모델을 데이터베이스 테이블과 열에 매핑하는 방법을 보여주는 창을 엽니다.

다음 단계

쿼리 식(F#)에 나열된 대로 가능한 쿼리 연산자를 확인하여 다른 쿼리를 탐색합니다.

참고 항목

작업

연습: 형식 공급자 및 엔터티를 사용하여 SQL 데이터베이스에 액세스(F#)

참조

EdmxFile 형식 공급자(F#)

기타 리소스

형식 공급자

ADO.NET Entity Framework

.edmx File Overview (Entity Framework)

Edm Generator (EdmGen.exe)