Compartir a través de


Tutorial: Generar tipos en F# a partir de un archivo DBML (F#)

Este tutorial para F# 3.0 describe cómo crear tipos para los datos de una base de datos cuando se tiene la información del esquema codificada en un archivo .dbml. LINQ to SQL utiliza este formato de archivo para representar el esquema de la base de datos. Se puede generar un archivo de esquema de LINQ to SQL en Visual Studio mediante el Diseñador objeto relacional (O/R). Para obtener más información, vea Información general sobre Object Relational Designer y Generación de código en LINQ to SQL.

El proveedor de tipos de lenguaje de marcado de base de datos (DBML) le permite escribir código que usa tipos basados en un esquema de base de datos sin necesidad de especificar una cadena de conexión estática en tiempo de compilación. Esto puede ser útil cuando haya que tener en cuenta la posibilidad de que la aplicación final utilice una base de datos diferente, credenciales diferentes o una cadena diferente de conexión que la que se utiliza para desarrollar la aplicación. Si se tiene una conexión de base de datos directa que se pueda utilizar en tiempo de compilación y ésta tiene la misma base de datos y credenciales que las que se usarán finalmente en la aplicación integrada, entonces tambien se puede utilizar el proveedor del tipo SQLDataConnection. Para obtener más información, vea Tutorial: Obtener acceso a una base de datos SQL mediante proveedores de tipo (F#).

Este tutorial muestra las siguientes tareas: Para que el tutorial tenga éxito, hay que completarlas en este orden:

  • Creación de un archivo .dbml

  • Creación y configuración de un proyecto F#

  • Configuración del proveedor de tipos

  • Consulta a la base de datos

Creación de un archivo .dbml

Si no se tiene una base de datos en la que probar, hay que crear una siguiendo las instrucciones que aparecen en la parte inferior de Tutorial: Obtener acceso a una base de datos SQL mediante proveedores de tipo (F#). Si se siguen estas instrucciones, se creará una base de datos denominada MyDatabase que contendrá algunas tablas simples y procedimientos almacenados en el SQL Server.

Si ya se tiene un archivo .dbml,se puede pasar a la sección, Creación y configuración de un proyecto F#. En caso contrario,se puede crear un archivo .dbml dada una base de datos SQL existente mediante la herramienta de línea de comandos SqlMetal.exe.

Cómo crear un archivo .dbml mediante SqlMetal.exe

  1. Abra un Símbolo del sistema del desarrollador.

  2. Asegúrese de que tiene acceso a SqlMetal.exe escribiendo SqlMetal.exe /? en el símbolo del sistema. SqlMetal.exe se instala normalmente en la carpeta Microsoft SDKs en Archivos de programa o en Archivos de programa (x86).

  3. Ejecute SqlMetal.exe con las siguientes opciones de línea de comandos. Sustituya una ruta de acceso adecuada en lugar de c:\destpath para crear el archivo .dbml e inserte los valores adecuados para el servidor de bases de datos, el nombre de instancia y el nombre de la base de datos.

    SqlMetal.exe /sprocs /dbml:C:\destpath\MyDatabase.dbml /server:SERVER\INSTANCE /database:MyDatabase
    

    Nota

    Si SqlMetal.exe tiene problemas con la creación del archivo por temas relativos a permisos, cambie el directorio actual a una carpeta a la que tenga acceso de escritura.

  4. También puede considerar las otras opciones de la línea de comandos disponibles. Por ejemplo, hay opciones que se pueden usar si se desean las vistas y funciones SQL incluidas en los tipos generados. Para obtener más información, vea SqlMetal.exe (Herramienta de generación de código).

Creación y configuración de un proyecto F#

En este paso, se creará un proyecto y se agregarán las referencias adecuadas para utilizar el proveedor de tipos DBML.

Cómo crear y configurar un proyecto F#

  1. Agregue un nuevo proyecto de aplicación de consola F# a la solución.

  2. En el Explorador de soluciones, abra el menú de acceso directo en Referencias y, a continuación, elija Agregar referencia en el menú contextual.

  3. En el área de Ensamblados, elija el nodo Framework y, a continuación, en la lista de ensamblados disponibles, elija los ensamblados System.Data y System.Data.Linq.

  4. En el área de Ensamblados, elija Extensiones y, a continuación, en la lista de ensamblados disponibles, elija FSharp.Data.TypeProviders.

  5. Elija el botón Aceptar para agregar referencias a estos ensamblados al proyecto.

  6. (Opcional). Copie el archivo .dbml que creó en el paso anterior y péguelo en la carpeta principal del proyecto. Esta carpeta contiene el archivo de proyecto (.fsproj) y archivos de código. En la barra de menú, elija Proyecto, Agregar elemento existente, y especifique el archivo .dbml para agregarlo al proyecto. Si se realizan estos pasos, se puede omitir el parámetro estático ResolutionFolder en el paso siguiente.

Configuración del proveedor de tipos

En esta sección, se creará un proveedor de tipos y se generarán tipos del esquema que se describe en el archivo .dbml.

Cómo configurar el proveedor de tipos y generar los tipos

  • Agregue el código que abre el espacio de nombres TypeProviders y crea instancias del proveedor para el archivo .dbml que se desea utilizar. Si se agregó el archivo .dbml al proyecto, se puede omitir el parámetro estático 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)
    

    El tipo DataContext proporciona acceso a todos los tipos generados y hereda de DataContext. El proveedor de tipos de DbmlFile tiene diferentes parámetros estáticos que se pueden establecer. Por ejemplo, se puede utilizar un nombre diferente para el tipo DataContext especificando DataContext=MyDataContext. En ese caso, el código será similar al siguiente ejemplo:

    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)
    

Consulta a la base de datos

En esta sección, se utilizan las expresiones de consulta de F# para consultar la base de datos.

Cómo consultar los datos

  • Agregue código para consultar la base de datos.

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

Pasos siguientes

Puede seguir utilizando otras expresiones de consulta o puede obtener una conexión a la bases de datos desde el contexto de datos y realizar operaciones normales de datos de ADO.NET. Para ver pasos adicionales, consulte las secciones de «Consultar los datos» en Tutorial: Obtener acceso a una base de datos SQL mediante proveedores de tipo (F#).

Vea también

Tareas

Tutorial: Obtener acceso a una base de datos SQL mediante proveedores de tipo (F#)

Referencia

DbmlFile (Proveedor de tipo de F#)

SqlMetal.exe (Herramienta de generación de código)

Expresiones de consulta (F#)

Otros recursos

Proveedores de tipo