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


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

В этом пошаговом руководстве на F# 3.0 описывается, как создать типы данных из базы данных при наличии сведений о схеме, закодированных в dbml-файле.LINQ to SQL использует этот формат файла для представления схемы базы данных.Можно создать файл схемы LINQ to SQL в Visual Studio с использованием реляционного конструктора объектов.Дополнительные сведения см. в разделах O/R Designer Overview и Code Generation in LINQ to SQL.

Поставщик типов языка разметки баз данных (DBML) позволяет писать код, который использует типы, основанные на схеме базы данных, не требуя определения статической строки соединения во время компиляции.Это может быть полезно, если нужно обеспечить возможность того, что конечное приложение будет использовать другую базу данных, другие учетные данные или другую строку подключения, отличную от той, которую вы использовали при разработке приложения.Если имеется прямое соединение с базой данных, которое можно использовать во время компиляции, и это одна и та же база данных и учетные данные, которые вы будете использовать в вашем построенном приложении, то можно также использовать поставщика типов SQLDataConnection.Дополнительные сведения см. в разделе Пошаговое руководство. Доступ к базе данных SQL с помощью поставщиков типов (F#).

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

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

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

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

  • Запрос к базе данных

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

При отсутствии базы данных для тестирования создайте её, выполнив инструкции в нижней части статьи Пошаговое руководство. Доступ к базе данных SQL с помощью поставщиков типов (F#).Если следовать приведенным инструкциям, то необходимо создать базу данных MyDatabase, которая содержит несколько простых таблиц и хранимых процедур в SQL Server.

Если dbml-файл уже создан, то можно перейти к шагу Создание и настройка проекта F#.В противном случае можно создать dbml-файл, заданного существующей базой данных SQL и с помощью программы командной строки SqlMetal.exe.

Создание dbml-файла с помощью SqlMetal.exe

  1. Откройте Командную строку разработчика.

  2. Убедитесь, что имеется доступ к SqlMetal.exe, введя в командной строке SqlMetal.exe /?.SqlMetal.exe обычно установлена в папке Microsoft SDKs в Program Files или Program Files (x86).

  3. Запустите SqlMetal.exe со следующими параметрами командной строки.Подставьте соответствующий путь вместо c:\destpath для создания dbml-файла и вставьте соответствующие значения для сервера базы данных, имени экземпляра и имени базы данных.

    SqlMetal.exe /sprocs /dbml:C:\destpath\MyDatabase.dbml /server:SERVER\INSTANCE /database:MyDatabase
    
    ПримечаниеПримечание

    Если SqlMetal.exe не может создать файл из-за проблем разрешений, то измените текущую папку папкой, к которой имеется доступ на запись.

  4. Можно также просмотреть другие доступные параметры командной строки.Например, есть параметры, которые можно использовать, если требуется включить представления и функции SQL в создаваемые типы.Дополнительные сведения см. в разделе SqlMetal.exe (средство создания кода).

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

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

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

  1. Добавьте новый проект консольного приложения F# в решение.

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

  3. В области Сборки выберите узел Основа, а затем в списке доступных сборок выберите сборки System.Data и System.Data.Linq.

  4. В области Сборки выберите Расширения, а затем в списке доступных сборок выберите FSharp.Data.TypeProviders.

  5. Нажмите кнопку ОК для добавления ссылки на следующие сборки в проект.

  6. (Необязательно).Скопируйте dbml-файл, созданный на предыдущем шаге, и вставьте его в главную папку проекта.Эта папка содержит файл проекта (.fsproj) и файлы кода.В строке меню выберите Проект, Добавление существующего элемента, а затем укажите dbml-файл, чтобы добавить его к проекту.При выполнении этих шагов можно опустить статический параметр ResolutionFolder в следующем шаге.

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

В этом разделе создается поставщик типа и формируются типы из схемы, описанной в dbml-файле.

Настройка поставщика типа и создание типов

  • Добавьте код, который открывает пространство имен TypeProviders и создает поставщика типа для dbml-файла, который необходимо использовать.Если dbml-файл добавлен в проект, то можно опустить статический параметр ResolutionFolder.

    open Microsoft.FSharp.Data.TypeProviders
    
    
    type dbml = DbmlFile<"MyDatabase.dbml", ResolutionFolder = @"<path to folder that contains .dbml file>>
    
    // This connection string can be specified at run time.
    let connectionString = "Data Source=MYSERVER\INSTANCE;Initial Catalog=MyDatabase;Integrated Security=SSPI;"
    let dataContext = new dbml.Mydatabase(connectionString)
    

    Тип DataContext предоставляет доступ ко всем созданным типам и наследуется от DataContext.Поставщик типа DbmlFile имеет различные статические параметры, которые можно задать.Например, можно использовать другое имя для типа DataContext, указав DataContext=MyDataContext.В этом случае код будет выглядеть примерно так:

    open Microsoft.FSharp.Data.TypeProviders
    
    
    
    type dbml = DbmlFile<"MyDatabase.dbml",
                         ContextTypeName = "MyDataContext">
    
    // This connection string can be specified at run time.
    let connectionString = "Data Source=MYSERVER\INSTANCE;Initial Catalog=MyDatabase;Integrated Security=SSPI;"
    let db = new dbml.MyDataContext(connectionString)
    

Запрос к базе данных

В этом разделе выражения запроса F# используются для запроса к базе данных.

Запрос данных

  • Добавьте код для запроса к базе данных.

    query {
            for row in db.Table1 do
            where (row.TestData1 > 2)
            select row
    }
    |> Seq.iter (fun row -> printfn "%d %s" row.TestData1 row.Name)
    

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

Можно продолжать пользоваться другими выражения запроса или устанавливать подключение к базе данных из контекста данных и запускать обычные операции по данным ADO.NET.Дополнительные действия см. в разделах после «Запрос данных» в статье Пошаговое руководство. Доступ к базе данных SQL с помощью поставщиков типов (F#).

См. также

Задачи

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

Ссылки

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

SqlMetal.exe (средство создания кода)

Выражения запросов (F#)

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

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