Tutorial: Crear clases de LINQ to SQL (Object Relational Designer)
Object Relational Designer proporciona una superficie de diseño visual para crear y editar las clases de LINQ a SQL (clases de entidad) basadas en los objetos de una base de datos. Mediante LINQ a SQL [LINQ to SQL], se puede obtener acceso a las bases de datos de SQL con tecnología LINQ.Para obtener más información, vea LINQ (Language-Integrated Query).
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 a 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 a 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 Object Relational Designer.
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:
Tener acceso a la versión de SQL Server de la base de datos de ejemplo Northwind.Para obtener más información, vea Cómo: Instalar bases de datos de ejemplo.
El procedimiento almacenado UpdateCustomer para la base de datos Northwind.Para obtener más información, vea Tutorial: Crear procedimientos almacenados de actualización para la tabla Customers de Northwind.
Crear la aplicación basada en Windows
Dado que va a trabajar con clases de LINQ a 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 Windows Forms.
Para crear el nuevo proyecto de aplicación para Windows
Desde el menú Archivo, cree un proyecto nuevo.
Asigne al proyecto el nombre ORDesignerWalkthrough.
[!NOTA]
El Object Relational Designer se admite en los proyectos de Visual Basic y C#, de forma que puede crear el nuevo proyecto en uno de estos lenguajes.
Haga clic en la plantilla Aplicación de Windows Forms y en Aceptar.Para obtener más información, vea Desarrollar aplicaciones cliente.
Se crea el proyecto ORDesignerWalkthrough y se agrega al Explorador de soluciones.
Agregar un archivo de clases de LINQ to SQL al proyecto (abrir Object Relational Designer)
Las clases de entidad se crean y se almacenan en archivos de clases de LINQ a SQL (archivos .dbml).El Object Relational Designer 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
En el menú Proyecto, haga clic en Agregar nuevo elemento.
Haga clic en la plantilla Clases de LINQ to SQL y escriba Northwind.dbml en el cuadro Nombre.
Haga clic en Agregar.
Se agrega al proyecto un archivo de clases de LINQ to SQL vacío (Northwind.dbml) y se abre el Object Relational Designer.
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, vea Métodos DataContext (Object Relational Designer).
Crear las clases de entidad Customer y Order
Cree las clases de LINQ a 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 Object Relational Designer.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 a Object Relational Designer
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, vea Cómo: Crear una conexión de datos a la base de datos Northwind.
Arrastre el nodo Customers del Explorador de servidores/Explorador de bases de datos hasta la superficie del Object Relational Designer.
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, vea Cómo: Activar y desactivar la pluralización (Object Relational Designer).
Arrastre el nodo Orders del Explorador de servidores/Explorador de bases de datos hasta la superficie del Object Relational Designer.
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 (Object Relational Designer).
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
En el menú Compilar, haga clic en Generar ORDesignerWalkthrough para generar el proyecto.
En el menú Datos, haga clic en Mostrar orígenes de datos.
En la ventana Orígenes de datos, seleccione Agregar nuevo origen de datos.
Haga clic en Objeto en la página Elegir un tipo de origen de datos y, a continuación, haga clic en Siguiente.
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, compile el proyecto y vuelva a ejecutar el asistente.
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 a SQL desde la ventana Orígenes de datos hasta un formulario Windows Forms.
Para agregar controles enlazados a las clases de entidad
Abra Form1 en la vista Diseño.
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.
Arrastre el nodo Orders desde la ventana Orígenes de datos hasta Form1.Colóquelo bajo CustomerDataGridView.
Abra Form1 en la vista Código.
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();
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
Presione F5.
Compruebe que los datos aparecen en las cuadrículas.
Seleccione un cliente.
Compruebe que los pedidos que se muestran son del cliente seleccionado.
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 a SQL.
Para implementar la funcionalidad de guardar
Abra Form1 en la vista Diseño.
Seleccione el botón Guardar en CustomerBindingNavigator.(El botón con el icono del disquete.)
En la ventana Propiedades, establezca la propiedad Enabled en True.
Haga doble clic en el botón Guardar para crear un controlador de eventos y cambiar al Editor de código.
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
Presione F5.
Modifique algunos datos en cualquiera de las cuadrículas.(Salga de la fila modificada en la cuadrícula para confirmar los cambios en proceso.)
Haga clic en el botón Guardar para volver a guardar los cambios en la base de datos.
Cierre el formulario.
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 las consultas LINQ (C#).
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
Abra Form1 en la vista Diseño.
Agregue un control TextBox al formulario y establezca su propiedad Nombre en CityTextBox.
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
Presione F5.
Escriba Londres en el cuadro de texto.
Haga clic en el botón Ejecutar consulta.
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 runtime de LINQ a SQL proporciona de forma predeterminada la lógica para realizar actualizaciones. El runtime 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 procedimientos almacenados de actualización para la tabla Customers de Northwind.
Para invalidar el comportamiento de actualización predeterminado
Abra el archivo LINQ to SQL en el Object Relational Designer. (Haga doble clic en el archivo Northwind.dbml en el Explorador de soluciones.)
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.
Arrastre el procedimiento almacenado UpdateCustomers hasta el Object Relational Designer.
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 (Object Relational Designer).
Seleccione la clase de entidad Customer en el Object Relational Designer.
En la ventana Propiedades, seleccione el comando que se va a invalidar.(Insertar, Actualizar o Eliminar).Para este ejemplo, seleccione la propiedad Actualizar.
Haga clic en los puntos suspensivos junto a Usar motor en tiempo de ejecución para abrir el cuadro de diálogo Configurar comportamiento.
Seleccione Personalizar.
Seleccione el método UpdateCustomers en la lista Personalizar.
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.
Asigne los argumentos de método originales (Original_ArgumentName) a las propiedades originales (PropertyName (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).
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
Presione F5.
Busque la columna ContactName en la cuadrícula de ALFKI.
Cambie el nombre de Maria Anders a Anders.
Salga de la fila para confirmar el cambio.
Haga clic en el botón Guardar.
Cierre el formulario.
Presione F5 para ejecutar de nuevo la aplicación y compruebe que solo 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 a SQL.A continuación, se indican algunas de las mejoras que podría realizar en esta aplicación:
Agregar más procedimientos almacenados para usarlos con los comandos Insertar y Eliminar.Para obtener más información, vea Cómo: Asignar procedimientos almacenados para realizar actualizaciones, inserciones y eliminaciones (Object Relational Designer).
Crear varias consultas LINQ para devolver datos filtrados.Para obtener más información, vea Cómo: Consultar información.
Vea también
Conceptos
Información general sobre Object Relational Designer
Novedades para el desarrollo de aplicaciones de datos en Visual Studio 2012
Otros recursos
LINQ General Programming Guide
LINQ Documentation Roadmap