Tutorial: Crear clases de LINQ to SQL (Diseñador relacional de objetos)

Actualización: November 2007

El Diseñador relacional de objetos (Diseñador R/O) proporciona una superficie de diseño visual para crear y editar las clases de LINQ to SQL (clases de entidad) basadas en los objetos de una base de datos. Mediante LINQ to SQL, se puede obtener acceso a las bases de datos SQL con tecnología LINQ. Para obtener más información, consulte Language-Integrated Query (LINQ).

En este tutorial se proporcionan los pasos necesarios para crear las clases de entidad de LINQ to SQL asignadas a las tablas Customers y Orders en la base de datos Northwind, y para mostrar los datos en un formulario Windows Forms. Además de los pasos para mostrar los datos de la tabla, también se proporcionan los pasos necesarios para enlazar los datos a una consulta LINQ. Por último, se proporcionan los pasos que indican cómo usar los procedimientos almacenados para invalidar la lógica predeterminada de LINQ to SQL para el envío de las actualizaciones de las clases de entidad a la base de datos.

En este tutorial, aprenderá a realizar las siguientes tareas:

  • Agregar un archivo de LINQ to SQL a un proyecto.

  • Crear nuevas clases de entidad asignadas a las tablas relacionadas en la base de datos.

  • Crear un origen de datos de objeto que haga referencia a las clases de entidad.

  • Crear un formulario Windows Forms que contenga controles enlazados a las clases de entidad.

  • Agregar código para cargar y guardar datos entre las clases de entidad y la base de datos.

  • Crear una consulta LINQ simple y mostrar los resultados en el formulario.

  • Agregar procedimientos almacenados al Diseñador relacional de objetos.

  • Configurar una clase de entidad de modo que se usen los procedimientos almacenados para realizar inserciones, actualizaciones y eliminaciones.

Requisitos previos

Para realizar este tutorial, necesita lo siguiente:

Crear la aplicación basada en Windows

Dado que va a trabajar con clases de LINQ to SQL y los datos se van a mostrar en un formulario Windows Forms, el primer paso de este tutorial es la creación de una nueva aplicación de formularios Windows Forms.

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.

Para crear el nuevo proyecto de aplicación para Windows

  1. Desde el menú Archivo, cree un proyecto nuevo.

  2. Asigne al proyecto el nombre ORDesignerWalkthrough.

    Nota:

    El Diseñador relacional de objetos se admite en los proyectos de Visual Basic y C#, de forma que puede crear el nuevo proyecto en uno de estos lenguajes.

  3. Haga clic en la plantilla Aplicación de Windows Forms y en Aceptar. Para obtener más información, vea Crear aplicaciones basadas en Windows.

    Se crea el proyecto ORDesignerWalkthrough y se agrega al Explorador de soluciones.

Agregar un archivo de clases de LINQ to SQL al proyecto (abrir el Diseñador relacional de objetos)

Las clases de entidad se crean y se almacenan en archivos de clases de LINQ to SQL (archivos .dbml). El Diseñador relacional de objetos se abre al abrir un archivo .dbml. Agregue archivos .dbml a los proyectos seleccionando la plantilla Clases de LINQ to SQL en el cuadro de diálogo Agregar nuevo elemento.

Para agregar un archivo .dbml a un proyecto

  1. En el menú Proyecto, haga clic en Agregar nuevo elemento.

  2. Haga clic en la plantilla Clases de LINQ to SQL y escriba Northwind.dbml en el cuadro Nombre.

  3. Haga clic en Agregar.

    Se agrega al proyecto un archivo de clases de LINQ to SQL vacío (Northwind.dbml) y se abre el Diseñador relacional de objetos.

Después de agregar el nuevo archivo de LINQ to SQL al proyecto, se abre la superficie de diseño vacía, mostrando dos paneles independientes. El panel izquierdo es el panel de entidades, donde se muestran y se configuran las clases de entidad. El panel derecho es el panel de métodos que muestra los métodos de DataContext agregados al diseñador. Si el panel de métodos no está visible, haga clic con el botón secundario del mouse en un área vacía del panel de entidades y, a continuación, haga clic en Mostrar panel Métodos. Toda la superficie vacía representa una clase DataContext lista para su configuración. El nombre de DataContext corresponde al nombre asignado al archivo .dbml. En este tutorial, el nombre de DataContext es NorthwindDataContext puesto que el archivo de LINQ to SQL se ha denominado Northwind.dbml. Para comprobarlo, haga clic en cualquier área vacía del diseñador y examine la ventana Propiedades.

Nota:

La clase DataContext contiene métodos y propiedades para realizar una conexión a una base de datos y manipular los datos de dicha base de datos (por ejemplo, realizando inserciones, actualizaciones y eliminaciones). Para obtener más información, consulte Métodos DataContext (Diseñador relacional de objetos).

Crear las clases de entidad Customer y Order

Cree las clases de LINQ to SQL que están asignadas a las tablas de base de datos arrastrando las tablas del Explorador de servidores/Explorador de bases de datos al Diseñador relacional de objetos. El resultado es una clase de entidad de LINQ to SQL que se asigna a la tabla en la base de datos.

Para agregar una clase de entidad Customer al Diseñador relacional de objetos

  1. En el Explorador de servidores/Explorador de bases de datos, busque las tablas en la versión de SQL Server de la base de datos de ejemplo Northwind. Para obtener más información, consulte Cómo: Crear una conexión de datos a la base de datos Northwind.

  2. Arrastre el nodo Customers del Explorador de servidores/Explorador de bases de datos hasta la superficie del Diseñador relacional de objetos.

    Se crea una clase de entidad denominada Customer. Dicha clase tiene propiedades que corresponden a las columnas de la tabla Customers. La clase de entidad se denomina Customer (no Customers) porque representa a un único cliente de la tabla Customers.

    Nota:

    Este comportamiento de cambio de nombre se denomina pluralización. Se puede activar o desactivar en Opciones (Cuadro de diálogo): Visual Studio. Para obtener más información, consulte Cómo: Activar y desactivar la pluralización (Diseñador relacional de objetos).

  3. Arrastre el nodo Orders del Explorador de servidores/Explorador de bases de datos hasta la superficie del Diseñador relacional de objetos.

    Se crea una clase de entidad denominada Order, junto con una asociación (relación) Customer_Order a la clase de entidad Customer. Dicha clase tiene propiedades que corresponden a las columnas de la tabla Orders.

    Nota:

    La clase de entidad se denomina Order porque representa un solo pedido. La clase primaria (Customer) tiene una propiedad Orders que representa la colección de pedidos para ese cliente concreto. Para obtener más información sobre las asociaciones de LINQ to SQL, vea Cómo: Crear una asociación (relación) entre las clases de LINQ to SQL (Diseñador relacional de objetos).

Crear un origen de datos de objeto con la clase de entidad Customer

Las clases de entidad, al igual que cualquier otra clase con propiedades públicas, se pueden usar como orígenes de datos de objeto. Se pueden agregar a la ventana Orígenes de datos y arrastrar hasta formularios para crear controles enlazados a datos (controles enlazados a los valores en las propiedades públicas del objeto). Agregue las clases de entidad a la ventana Orígenes de datos ejecutando el Asistente para la configuración de orígenes de datos y haciendo clic en Objeto para el origen de datos en el asistente.

Para agregar Customer como un origen de datos de objeto en la ventana Orígenes de datos

  1. En el menú Generar, haga clic en Generar ORDesignerWalkthrough para generar el proyecto.

  2. En el menú Datos, haga clic en Mostrar orígenes de datos.

  3. En la ventana Orígenes de datos, seleccione Agregar nuevo origen de datos.

  4. Haga clic en Objeto en la página Elegir un tipo de origen de datos y, a continuación, haga clic en Siguiente.

  5. Expanda el nodo ORDesignerWalkthrough (el nodo con el nombre del proyecto) y, a continuación, busque y seleccione la clase Customer.

    Nota:

    Si la clase Customer no está disponible, cierre el asistente, genere el proyecto y vuelva a ejecutar el asistente.

  6. Haga clic en Finalizar para crear el origen de datos y agregar la clase de entidad Customer a la ventana Orígenes de datos.

Crear controles enlazado a datos para mostrar los datos en un formulario Windows Forms

Cree los controles enlazados a las clases de entidad arrastrando los elementos de origen de datos de LINQ to SQL desde la ventana Orígenes de datos hasta un formulario Windows Forms.

Para agregar controles enlazados a las clases de entidad

  1. Abra Form1 en la vista de diseño.

  2. Desde la ventana Orígenes de datos, arrastre el nodo Customer hasta Form1.

    Nota:

    Para mostrar la ventana Orígenes de datos, haga clic en Mostrar orígenes de datos en el menú Datos.

  3. Arrastre el nodo Orders desde la ventana Orígenes de datos hasta Form1. Colóquelo bajo CustomerDataGridView.

  4. Abra Form1 en la vista Código.

  5. Agregue al formulario el código siguiente, global para el formulario, fuera de cualquier método concreto, pero dentro de la clase Form1:

    Private NorthwindDataContext1 As New NorthwindDataContext
    
    private NorthwindDataContext northwindDataContext1
        = new NorthwindDataContext();
    
  6. Cree un controlador de eventos para el evento Form_Load y agregue el código siguiente al controlador:

    CustomerBindingSource.DataSource = NorthwindDataContext1.Customers
    
    customerBindingSource.DataSource
        = northwindDataContext1.Customers;
    

Probar la aplicación

Ejecute la aplicación. Llegado a este punto, el formulario contiene un control DataGridView que muestra los datos de la tabla Customers, y un segundo control DataGridView que muestra los datos de los pedidos del cliente seleccionado.

Nota:

Observe que el botón Guardar está deshabilitado. (En la sección siguiente, se implementará la funcionalidad de guardar.)

Para probar la aplicación

  1. Presione F5.

  2. Compruebe que los datos aparecen en las cuadrículas.

  3. Seleccione un cliente.

  4. Compruebe que los pedidos que se muestran son del cliente seleccionado.

  5. Cierre el formulario. (En el menú Depurar, haga clic en Detener depuración.)

Implementar la funcionalidad de guardar

Como se ha indicado anteriormente, de forma predeterminada el botón Guardar no está habilitado y la funcionalidad de guardar no está implementada. Además, no se agrega automáticamente código para guardar los datos modificados en el formulario cuando se crean controles enlazados a datos para los orígenes de datos de objeto. En esta sección se explica cómo habilitar el botón Guardar e implementar la funcionalidad de guardar para los objetos de LINQ to SQL.

Para implementar la funcionalidad de guardar

  1. Abra Form1 en la vista de diseño.

  2. Seleccione el botón Guardar en CustomerBindingNavigator. (El botón con el icono del disquete.)

  3. En la ventana Propiedades, establezca la propiedad Enabled en True.

  4. Haga doble clic en el botón Guardar para crear un controlador de eventos y cambiar al Editor de código.

  5. Agregue el código siguiente al controlador de eventos del botón Guardar.

    Try
        NorthwindDataContext1.SubmitChanges()
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
    
    try
    {
        northwindDataContext1.SubmitChanges();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
    

Probar la aplicación

Ejecute la aplicación. El botón Guardar debería estar habilitado y la funcionalidad para guardar datos está disponible.

Para probar la aplicación

  1. Presione F5.

  2. Modifique algunos datos en cualquiera de las cuadrículas. (Salga de la fila modificada en la cuadrícula para confirmar los cambios en proceso.)

  3. Haga clic en el botón Guardar para volver a guardar los cambios en la base de datos.

  4. Cierre el formulario.

  5. Presione F5 y compruebe que se conservan los cambios (o busque la tabla en la base de datos para comprobar que los cambios se han guardado).

Enlazar a consultas LINQ

Además de enlazar CustomerBindingSource a DataContext, también se puede enlazar directamente a consultas LINQ. Para obtener más información sobre cómo crear consultas LINQ, vea Introducción a consultas con LINQ.

Agregar controles Button y TextBox al formulario

Para obtener información sobre cómo enlazar controles a consultas LINQ, agregue al formulario controles que permitan escribir un parámetro de consulta y, a continuación, ejecute la consulta.

Para agregar controles al formulario

  1. Abra Form1 en la vista de diseño.

  2. Agregue un control TextBox al formulario y establezca su propiedad Nombre en CityTextBox.

  3. Agregue un control Button al formulario y establezca las propiedades siguientes:

    • Nombre = RunQueryButton

    • Texto = Ejecutar consulta

Enlazar datos a la consulta LINQ

Agregue el código para ejecutar una consulta LINQ. La consulta usa el valor escrito en CityTextBox como parámetro de consulta.

Para enlazar a una consulta LINQ

  • Haga doble clic en RunQueryButton y agregue el código siguiente al controlador de eventos RunQueryButton_click:

    Dim CustomersQuery = From customers in NorthwindDataContext1.Customers _
        Where customers.City = CityTextBox.Text _
        Select customers
    
    CustomerBindingSource.DataSource = CustomersQuery
    
    var CustomersQuery = from customers in northwindDataContext1.Customers
                          where customers.City == CityTextBox.Text
                          select customers;
    customerBindingSource.DataSource = CustomersQuery;
    

Probar la aplicación

Ejecute la aplicación. Ahora puede consultar los clientes de una ciudad concreta.

Para probar la aplicación

  1. Presione F5.

  2. Escriba Londres en el cuadro de texto.

  3. Haga clic en el botón Ejecutar consulta.

  4. Compruebe que se muestren únicamente los clientes cuya propiedad Ciudad tenga el valor Londres.

Invalidar el comportamiento predeterminado para realizar actualizaciones (inserciones, actualizaciones y eliminaciones)

El motor en tiempo de ejecución LINQ to SQL proporciona, de forma predeterminada, la lógica para realizar actualizaciones. El motor en tiempo de ejecución crea instrucciones predeterminadas de inserción, actualización y eliminación basándose en la instrucción Select que se usa para rellenar la clase de entidad con datos. Cuando no se desea usar el comportamiento predeterminado, se puede configurar el comportamiento de actualización y designar procedimientos almacenados concretos para realizar las inserciones, actualizaciones y eliminaciones necesarias para poder manipular los datos de la base de datos. También se puede realizar esta acción cuando no se genera el comportamiento predeterminado, por ejemplo, cuando las clases de entidad se asignan a tablas combinadas. Además, se puede invalidar el comportamiento de actualización predeterminado cuando la base de datos requiere el acceso a las tablas a través de procedimientos almacenados.

Nota:

Esta sección requiere la disponibilidad de los procedimientos almacenados InsertCustomer, UpdateCustomer y DeleteCustomer adicionales para la base de datos Northwind. Para obtener información detallada sobre cómo crear estos procedimientos almacenados, vea Tutorial: Crear la actualización de procedimientos almacenados para la tabla Customers de Northwind.

Para invalidar el comportamiento de actualización predeterminado

  1. Abra el archivo de LINQ to SQL en el Diseñador relacional de objetos. (Haga doble clic en el archivo Northwind.dbml en el Explorador de soluciones.)

  2. En el Explorador de servidores/Explorador de bases de datos, expanda el nodo Procedimientos almacenados de las bases de datos Northwind y busque el procedimiento almacenado UpdateCustomers.

  3. Arrastre el procedimiento almacenado UpdateCustomers hasta el Diseñador relacional de objetos.

    El procedimiento almacenado UpdateCustomers se agrega al panel de métodos como un método de DataContext. Para obtener más información, vea Métodos DataContext (Diseñador relacional de objetos).

  4. Seleccione la clase de entidad Customer en el Diseñador relacional de objetos.

  5. En la ventana Propiedades, seleccione el comando que se va a invalidar. (Insertar, Actualizar o Eliminar). Para este ejemplo, seleccione la propiedad Actualizar.

  6. Haga clic en los puntos suspensivos junto a Usar motor en tiempo de ejecución para abrir el cuadro de diálogo Configurar comportamiento.

  7. Seleccione Personalizar.

  8. Seleccione el método UpdateCustomers en la lista Personalizar.

  9. Examine la lista de Argumentos de método y Propiedades de clase, y observe que hay dos argumentos de método y dos propiedades de clase para algunas columnas de la tabla. De este modo, se facilitan el seguimiento de los cambios y la creación de instrucciones para comprobar las infracciones de simultaneidad.

  10. Asigne los argumentos de método originales (Original_nombreDeArgumento) a las propiedades originales (nombreDePropiedad (Original)). Para este tutorial, debe asignar el argumento Original_CustomerID a la propiedad CustomerID (Original).

    Nota:

    De forma predeterminada, los argumentos de método se asignarán a las propiedades de clase cuando los nombres coincidan. Si se modifican los nombres de propiedad y ya no hay coincidencia entre la tabla y la clase de entidad, puede que tenga que seleccionar la propiedad de clase equivalente para la asignación si el diseñador no puede determinar la asignación correcta. Además, si los argumentos de método no tienen propiedades de clase válidas a las que asignarse, puede establecer el valor de Propiedades de clase en (Ninguno).

  11. Haga clic en Aceptar.

Probar la aplicación

Vuelva a ejecutar la aplicación para comprobar que el procedimiento almacenado UpdateCustomers actualiza correctamente el registro de cliente en la base de datos.

Para probar la aplicación

  1. Presione F5.

  2. Busque la columna ContactName en la cuadrícula de ALFKI.

  3. Cambie el nombre de Maria Anders a Anders.

  4. Salga de la fila para confirmar el cambio.

  5. Haga clic en el botón Guardar.

  6. Cierre el formulario.

  7. Presione F5 para ejecutar de nuevo la aplicación y compruebe que sólo aparece Anders en la columna ContactName de ALFKI.

Pasos siguientes

Dependiendo de los requisitos de la aplicación, hay varios pasos que se pueden dar después de crear las clases de entidad de LINQ to SQL. A continuación, se indican algunas de las mejoras que podría realizar en esta aplicación:

Vea también

Conceptos

Información general sobre el Diseñador relacional de objetos

Lo nuevo en datos

Referencia

Guía de programación general con LINQ

Otros recursos

Diseñador relacional de objetos (Diseñador R/O)

LINQ to SQL

LINQ to ADO.NET

LINQ Documentation Roadmap

Obtener acceso a datos (Visual Studio)