Поделиться через


Пошаговое руководство. Создание типов F# из файла схемы EDMX (F#)

В этом пошаговом руководстве на F# 3.0 отображено, как создать типы данных, которые представляются моделью EDM, схема для которого определена в файле .edmx.В этом пошаговом руководстве также показано, как использовать поставщик типа EdmxFile.Перед началом рассмотрим, является ли поставщик типа SqlEntityConnection более подходящим поставщиком типов.Поставщик типа SqlEntityConnection оптимально подходит для сценариев, где имеется база данных в режиме реального времени, к которой можно подключиться во время разработки проекта, а вы не возражаете против указания строки подключения во время компиляции.Однако этот поставщик типа также ограничен в том, что он не предоставляет все необходимые функциональные возможности базы данных как поставщик типа EdmxFile.Кроме того, если отсутствует подключение к базе данных в режиме реального времени для проекта базы данных, использующего модель EDM, то можно использовать edmx-файл, чтобы реализовать код для базы данных.При использовании поставщика типов EdmxFile компилятор F# выполняет EdmGen.exe для создания типов, которые он содержит.

В этом пошаговом руководстве проиллюстрированы следующие задачи, которые должны выполняться в следующем порядке для успешного завершения пошагового руководства:

  • Создание файла EDMX

  • Создание проекта

  • Поиск или создание строки соединения для модели EDM

  • Настройка поставщика типов

  • Извлечение данных

  • Вызов хранимой процедуры

Создание файла EDMX

Если уже имеется файл EDMX, то можно пропустить этот шаг.

Создание EDMX-файла

  • Если файл EDMX отсутствует, то следуйте инструкциям Краткое руководство по службам ADO.NET Entity Framework для создания модели EDM и файла EDMX для базы данных.В качестве альтернативы можно ссылаться на инструкции в конце этого пошагового руководства в шаге Настройка модели EDM.

Создание проекта

На этом шаге создается проект и добавляются необходимые ссылки на него для использования поставщика типа EDMX.

Создание и настройка проекта F#

  1. Закройте предыдущий проект, создайте другой проект и назовите его SchoolEDM.

  2. В Обозреватель решений щелкните правой кнопкой мыши пункт Ссылки и затем выберите команду Добавить ссылку.

  3. В области Сборки выберите узел Основа.

  4. В списке доступных сборок выберите сборки System.Data.Entity и System.Data.Linq, а затем нажмите кнопку Добавить для добавления ссылки на следующие сборки в проект.

  5. В области Сборки выберите узел Расширения.

  6. В списке доступных расширений добавьте ссылку на сборку FSharp.Data.TypeProviders.

  7. Добавьте следующий код для открытия соответствующие пространства имен.

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

Поиск или создание строки соединения для модели EDM

Строка соединения для модели EDM (строка соединения EDMX) включает не только строку соединения для поставщика базы данных, но и дополнительные сведения.Например, строка подключения EDMX для простой базы данных SQL Server похожа на следующий код.

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

Дополнительные сведения о строках подключений EDMX см. в разделе Connection Strings.

Нахождение или создание строки подключения для модели EDM

  • Строки подключения 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-файла.Замените Сервер\Экземпляр именем сервера, на котором выполняется 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 используется в выражении запроса, чтобы убедиться, что возвращается только один результат; в противном случае возникает исключение.Для того, чтобы легче работать со значениями null, можно использовать простую функцию nullable, которая определена в этом коде для создания значения, допускающего значение null, из обычного значения.

Настройка модели EDM

Эту процедуру следует выполнить , только если необходимо знать, как создать полную модель EDM из базы данных, а у вас нет базы данных для тестирования.

Настройка модели EDM

  1. В строке меню выберите SQL-код, Редактор Transact-SQL, Создать запрос для создания базы данных.При требуется, укажите сервер и экземпляр базы данных.

  2. Скопируйте и вставьте в них содержимое сценария базы данных, который создает базу данных студентов, как описано в Creating the School Sample Database.

    Следующие шаги в данном пошаговом руководстве основаны на ADO.NET Entity Data Model Quickstart.

  3. Выполните скрипт SQL с помощью кнопки панели инструментов с символом треугольника или нажав Ctrl+Q.

  4. В Обозреватель серверов откройте контекстное меню для Подключения данных, выберите Добавить подключение, а затем введите имя сервера базы данных, имя экземпляра и базы данных School.

  5. Создайте проект консольного приложения C# или Visual Basic, откройте его контекстное меню, выберите команду Добавление нового элемента, а затем выберите Модель EDM ADO.NET.

    Откроется Мастер моделей EDM.С помощью этого мастера можно выбрать способ создания модели EDM.

  6. В Выбор содержимого модели установите флажок Создать из базы данных.

  7. На следующей странице выберите только что созданную базу данных School как подключение к данным.

    Это подключение должно напоминать <servername>.<instancename>.School.dbo.

  8. Скопируйте строку подключения сущности в буфер обмена, поскольку эта строка может быть важна в будущем.

  9. Убедитесь, что установлен флажок для сохранения строки подключения сущности в файл App.Config, и сделайте заметку в виде строкового значения в текстовом поле, которое должно помочь найти строку подключения позже, при необходимости.

  10. Н следующей странице выберите Таблицы и Хранимые процедуры и функции.

    Выбирая эти узлы верхнего уровня, вы выбираете все таблицы, хранимые процедуры и функции.Можно также выбрать их отдельно, если необходимо.

  11. Убедитесь, что выбраны флажки для других параметров.

    Первый флажок Использовать созданные имена объектов в единственном или множественном числе указывает, изменять ли формы в единственном числе в формы во множественном числе для соответствия соглашениям в именовании объектов, представляющих таблицы базы данных.Флажок Включить столбцы внешнего ключа в модель указывает, следует ли включать поля, назначение которых - соединение с другими полями в типах объектов, созданных для схемы базы данных.Третий флажок указывает, включать ли хранимые процедуры и функции в модель.

  12. Нажмите кнопку Готово для формирования edmx-файла, содержащего модель EDM на основе базы данных School.

    Файл Model1.edmx добавляется в проект, и появляется диаграмма базы данных.

  13. В строке меню выберите Вид, Другие окна, Обозреватель моделей EDM для просмотра всех сведений о модели или Сведения о сопоставлении модели EDM для открытия окна, которое указывает, как созданная модель объектов сопоставляется на таблицы и столбцы базы данных.

Следующие действия

Изучите другие запросы, просмотрев доступные операторы запроса, отображаемые в Выражения запросов (F#).

См. также

Задачи

Пошаговое руководство. Доступ к базе данных SQL с помощью поставщиков типов и сущностей (F#)

Ссылки

Поставщик типов EdmxFile (F#)

Другие ресурсы

Поставщики типов

Платформа ADO.NET Entity Framework

.edmx File Overview (Entity Framework)

Edm Generator (EdmGen.exe)