Tutorial: Modelo de objetos simple y consultas (C#) (LINQ to SQL)

Actualización: November 2007

Este tutorial proporciona un escenario completo de LINQ to SQL básico, con las mínimas dificultades. 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 a código por diseño, para que sea más sencillo mostrar los conceptos de LINQ to SQL. Para decirlo claramente, para crear un modelo de objetos utilizaría el Diseñador relacional de objetos.

Nota:

Es posible que su equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario de Visual Studio incluidos en las instrucciones siguientes. 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 Valores de configuración de Visual Studio.

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

Requisitos previos

  • Este tutorial utiliza una carpeta dedicada ("c:\linqtest5") 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 (LINQ to SQL). Después de haber descargado la base de datos, copie el archivo en la carpeta c:\linqtest5.

Información general

Este tutorial se compone de seis tareas principales:

  • Crear una solución 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 generar y ejecutar un proyecto de LINQ to SQL.

Para crear una solución LINQ to SQL

  1. En el menú Archivo de Visual Studio, elija Nuevo y, a continuación, haga clic en Proyecto.

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

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

  4. En el cuadro Nombre, escriba LinqConsoleApp.

  5. En el cuadro Ubicación, compruebe dónde desea almacenar los archivos de proyecto.

  6. Haga clic en Aceptar.

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 (expanda el nodo Referencias en el Explorador de soluciones), 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. Agregue las directivas siguientes al principio de Program.cs:

    using System.Data.Linq;
    using System.Data.Linq.Mapping;
    

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 Program.cs, justo encima de la declaración de la clase Program:

    [Table(Name = "Customers")]
    public class Customer
    {
    }
    

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. Después, LINQ to SQL podrá almacenar y recuperar los valores directamente, en lugar de utilizar descriptores de acceso 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 Program.cs, dentro de las llaves de la clase Customer.

    private string _CustomerID;
    [Column(IsPrimaryKey=true, Storage="_CustomerID")]
    public string CustomerID
    {
        get
        {
            return this._CustomerID;
        }
        set
        {
            this._CustomerID = value;
        }
    
    }
    
    private string _City;
    [Column(Storage="_City")]
    public string City
    {
        get
        {
            return this._City;
        }
        set
        {
            this._City=value;
        }
    }
    
        }
    
    }
    

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<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 Main.

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

    // Use a connection string.
    DataContext db = new DataContext
        (@"c:\linqtest5\northwnd.mdf");
    
    // Get a typed table to run queries.
    Table<Customer> Customers = db.GetTable<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 consultas con LINQ.

También generará un resultado de registro para mostrar los comandos SQL que LINQ to SQL genera. 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 sencilla

  • Escriba o pegue el código siguiente en el método Main después de la declaración Table<Customer>.

    // Attach the log to show generated SQL.
    db.Log = Console.Out;
    
    // Query for customers in London.
    IQueryable<Customer> 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 foreach, 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 Main (después de la descripción de la consulta).

    foreach (Customer cust in custQuery)
    {
        Console.WriteLine("ID={0}, City={1}", cust.CustomerID,
            cust.City);
    }
    
    // Prevent console window from closing.
    Console.ReadLine();
    
  2. Presione F5 para depurar la aplicación.

    Nota:

    Si la aplicación genera un error en tiempo de ejecución, consulte la sección Solución de problemas de Aprender mediante tutoriales (LINQ to SQL).

    Los resultados de la consulta en la ventana de la consola deberían ser similares a éstos:

    ID=AROUT, City=London

    ID=BSBEV, City=London

    ID=CONSH, City=London

    ID=EASTC, City=London

    ID=NORTS, City=London

    ID=SEVES, City=London

  3. Presione Entrar en la ventana de la consola para cerrar la aplicación.

Pasos siguientes

El tema Tutorial: Realizar consultas en varias relaciones (C#) (LINQ to SQL) continúa en el punto 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.

Vea también

Conceptos

Aprender mediante tutoriales (LINQ to SQL)