Tutorial: Modelo de objetos simple y consultas (Visual Basic)

Este tutorial proporciona un escenario fundamental de LINQ to SQL de principio a fin con complejidades mínimas. Creará una clase de entidad que modela la tabla Customers de la base de datos de ejemplo Northwind. Después creará una consulta simple para enumerar los clientes que se encuentran en Londres.

Este tutorial está orientado al código por diseño para ayudar a mostrar los conceptos de LINQ to SQL Por lo general, se utiliza el Object Relational Designer para crear el modelo de objetos.

Nota:

Es posible que tu equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario de Visual Studio en las siguientes instrucciones. La edición de Visual Studio que se tenga y la configuración que se utilice determinan estos elementos. Para obtener más información, vea Personalizar el IDE.

Este tutorial se escribió con la configuración de desarrollo de Visual Basic.

Requisitos previos

  • Este tutorial utiliza una carpeta dedicada ("c:\linqtest") que contiene los archivos. Cree esta carpeta antes de empezar el tutorial.

  • Este tutorial requiere la base de datos de ejemplo Northwind. Si no dispone de esta base de datos en el equipo de desarrollo, puede descargarla del sitio web de descargas de Microsoft. Para obtener instrucciones, vea Descargar bases de datos de ejemplo. Después de haber descargado la base de datos, copie el archivo en la carpeta c:\linqtest.

Información general

Este tutorial se compone de seis tareas principales:

  • Creación de una solución de LINQ to SQL en Visual Studio.

  • Asignar una clase a una tabla de base de datos.

  • Designar propiedades en la clase para representar las columnas de base de datos.

  • Especificar la conexión a la base de datos Northwind.

  • Crear una consulta simple para ejecutarla en la base de datos.

  • Ejecutar la consulta y observar los resultados.

Crear una solución LINQ to SQL

En esta primera tarea, va a crear una solución de Visual Studio que contiene las referencias necesarias para compilar y ejecutar un proyecto de LINQ to SQL.

Para crear una solución LINQ to SQL

  1. En el menú Archivo, haga clic en Nuevo proyecto.

  2. En el panel Tipos de proyecto del cuadro de diálogo Nuevo proyecto, haga clic en Visual Basic.

  3. En el panel Plantillas, haga clic en Aplicación de consola.

  4. En el cuadro Nombre, escriba LinqConsoleApp.

  5. Haga clic en OK.

Agregar referencias y directivas LINQ

En este tutorial se usan ensamblados que podrían no estar instalados en el proyecto de forma predeterminada. Si System.Data.Linq no se incluye como referencia en su proyecto (haga clic en Mostrar todos los archivos en el Explorador de soluciones y expanda el nodo Referencias), agréguelo, como se explica en los pasos siguientes.

Para agregar System.Data.Linq

  1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en Referencias y, a continuación, haga clic en Agregar referencia.

  2. En el cuadro de diálogo Agregar referencia, haga clic en .NET, en el ensamblado System.Data.Linq y, a continuación, en Aceptar.

    El ensamblado se agrega al proyecto.

  3. También en el cuadro de diálogo Agregar referencia, haga clic en .NET, desplácese hasta System.Windows.Forms y haga clic en él, y, a continuación, haga clic en Aceptar.

    Este ensamblado, que permite usar el cuadro de mensaje en el tutorial, se agrega al proyecto.

  4. Agregue las directivas siguientes antes de Module1:

    Imports System.Data.Linq
    Imports System.Data.Linq.Mapping
    Imports System.Windows.Forms
    
    

Asignar una clase a una tabla de base de datos

En este paso, creará una clase y la asignará a una tabla de base de datos. Este tipo de clase se denomina clase de entidad. Observe que la asignación se realiza con solo agregar el atributo TableAttribute. La propiedad Name especifica el nombre de la tabla de la base de datos.

Para crear una clase de entidad y asignarla a una tabla de base de datos

  • Escriba o pegue el código siguiente en Module1.vb, justo encima de Sub Main:

    <Table(Name:="Customers")> _
    Public Class Customer
    End Class
    

Designar propiedades en la clase para representar columnas de base de datos

En este paso, realizará varias tareas.

  • Utilizará el atributo ColumnAttribute para designar las propiedades CustomerID y City en la clase de entidad como representativas de las columnas de la tabla de base de datos.

  • Designará la propiedad CustomerID como representativa de una columna de clave principal en la base de datos.

  • Designará los campos _CustomerID y _City para el almacenamiento privado. LINQ to SQL puede entonces almacenar y recuperar los valores directamente, en lugar de utilizar accesores públicos que podrían incluir lógica empresarial.

Para representar las características de dos columnas de base de datos

  • Escriba o pegue el código siguiente en Module1.vb, justo delante de End Class:

    Private _CustomerID As String
    <Column(IsPrimaryKey:=True, Storage:="_CustomerID")> _
    Public Property CustomerID() As String
        Get
            Return Me._CustomerID
        End Get
        Set(ByVal value As String)
            Me._CustomerID = value
        End Set
    End Property
    
    Private _City As String
    <Column(Storage:="_City")> _
    Public Property City() As String
        Get
            Return Me._City
        End Get
        Set(ByVal value As String)
            Me._City = value
        End Set
    End Property
    

Especificar la conexión a la base de datos Northwind

En este paso, utilizará un objeto DataContext para establecer una conexión entre sus estructuras de datos basadas en código y la propia base de datos. DataContext es el canal principal a través del cual se recuperan los objetos de la base de datos y se envían los cambios.

También declarará Table(Of Customer) para que actúe como la tabla lógica con tipo para las consultas que realizará en la tabla Customers de la base de datos. Creará y ejecutar estas consultas en pasos posteriores.

Para especificar la conexión a la base de datos

  • Escriba o pegue el código siguiente en el método Sub Main.

    Tenga en cuenta que se asume que el archivo northwnd.mdf está en la carpeta linqtest. Para obtener más información, vea la sección Requisitos previos, anteriormente en este tutorial.

    ' Use a connection string.
    Dim db As New DataContext _
        ("c:\linqtest\northwnd.mdf")
    
    ' Get a typed table to run queries.
    Dim Customers As Table(Of Customer) = _
        db.GetTable(Of Customer)()
    

Crear una consulta simple

En este paso, creará una consulta para buscar los clientes de la tabla de base de datos Customers que se encuentran en Londres. En este paso, el código de la consulta simplemente la describe. No la ejecuta. Este enfoque se denomina ejecución diferida. Para obtener más información, vea Introducción a las consultas LINQ (C#).

También producirá una salida de registro para mostrar los comandos SQL que genera LINQ to SQL. Esta característica de registro (que utiliza Log) es útil para la depuración, así como para determinar que los comandos que se envían a la base de datos representan la consulta de manera precisa.

Para crear una consulta simple

  • Escriba o pegue el código siguiente en el método Sub Main después de la declaración Table(Of Customer):

    ' Attach the log to show generated SQL in a console window.
    db.Log = Console.Out
    
    ' Query for customers in London.
    Dim custQuery = _
        From cust In Customers _
        Where cust.City = "London" _
        Select cust
    

Ejecutar la consulta

En este paso es donde realmente ejecutará la consulta. Las expresiones de consulta creadas en pasos anteriores no se evalúan hasta que no se necesitan los resultados. Al comenzar la iteración For Each, se ejecuta un comando SQL en la base de datos y se materializan los objetos.

Para ejecutar la consulta

  1. Escriba o pegue el código siguiente al final del método Sub Main (después de la descripción de la consulta):

    ' Format the message box.
    Dim msg As String = "", title As String = "London customers:", _
        response As MsgBoxResult, style As MsgBoxStyle = _
        MsgBoxStyle.Information
    
    ' Execute the query.
    For Each custObj In custQuery
        msg &= String.Format(custObj.CustomerID & vbCrLf)
    Next
    
    ' Display the results.
    response = MsgBox(msg, style, title)
    
  2. Presione F5 para depurar la aplicación.

    Nota

    Si su aplicación genera un error en tiempo de ejecución, consulte la sección de resolución de problemas de Aprendizaje por medio de tutoriales.

    El cuadro de mensaje muestra una lista de seis clientes. La ventana Consola muestra el código SQL generado.

  3. Haga clic en Aceptar para descartar el cuadro de mensaje.

    La aplicación se cierra.

  4. En el menú Archivo, haga clic en Guardar todo.

    Necesitará esta aplicación si va a continuar con el tutorial siguiente.

Pasos siguientes

El tema Tutorial: Realizar consultas en varias relaciones (Visual Basic) continúa donde finaliza este tutorial. El tutorial Realizar consultas en varias relaciones muestra cómo LINQ to SQL puede realizar consultas entre tablas, de forma similar a las combinaciones en las bases de datos relacionales.

Si desea seguir los pasos del tutorial Realizar consultas en varias relaciones, no olvide guardar la solución del tutorial que acaba de completar, que es un requisito previo.

Consulte también