Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Nota:
La DataSet clase y las clases relacionadas son tecnologías heredadas de .NET Framework de principios de los años 2000 que permiten a las aplicaciones trabajar con datos en memoria mientras las aplicaciones están desconectadas de la base de datos. Las tecnologías son especialmente útiles para las aplicaciones que permiten a los usuarios modificar datos y conservar los cambios de nuevo en la base de datos. Aunque los conjuntos de datos son una tecnología probada de éxito, el enfoque recomendado para las nuevas aplicaciones .NET es usar Entity Framework Core. Entity Framework proporciona una manera más natural de trabajar con datos tabulares como modelos de objetos y tiene una interfaz de programación más sencilla.
Las herramientas LINQ to SQL de Visual Studio proporcionan una superficie de diseño visual para crear y editar clases LINQ to SQL (clases de entidad) basadas en objetos de una base de datos. Mediante LINQ to SQL, puede usar la tecnología LINQ para acceder a bases de datos SQL. Para obtener más información, consulte LINQ (Language Integrated Query).
De forma predeterminada, el entorno de ejecución de LINQ to SQL proporciona la lógica para realizar actualizaciones. El tiempo de ejecución crea instrucciones predeterminadas Insert, Update y Delete basadas en el esquema de la tabla (las definiciones de columna y la información de clave principal). Si no desea usar el comportamiento predeterminado, puede configurar el comportamiento de actualización y designar procedimientos almacenados específicos para realizar las inserciones, actualizaciones y eliminaciones necesarias para trabajar con 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 vistas. Además, puede invalidar el comportamiento de actualización predeterminado cuando la base de datos requiere acceso a tablas mediante procedimientos almacenados. Para obtener más información, consulte Personalización de operaciones mediante procedimientos almacenados.
Nota:
Este tutorial requiere la disponibilidad de los procedimientos almacenados InsertCustomer, UpdateCustomer y DeleteCustomer para la base de datos Northwind.
En este tutorial se proporcionan los pasos que debe seguir para invalidar el comportamiento predeterminado en tiempo de ejecución de LINQ to SQL para guardar los datos en una base de datos mediante procedimientos almacenados.
Durante este tutorial, aprenderá a realizar las siguientes tareas:
Cree una nueva aplicación de Windows Forms y agregue un archivo LINQ to SQL.
Cree una clase de entidad que esté asignada a la tabla Northwind
Customers.Cree un origen de datos de objeto que haga referencia a la clase LINQ to SQL
Customer.Cree un Windows Form que contenga un DataGridView enlazado a la clase
Customer.Implemente la funcionalidad de guardado para el formulario.
Crear DataContext métodos agregando procedimientos almacenados al Diseñador de O/R.
Configure la
Customerclase para usar procedimientos almacenados para realizar inserciones, actualizaciones y eliminaciones.
Prerrequisitos
En este tutorial se usa SQL Server Express LocalDB y la base de datos de ejemplo Northwind.
Si no tiene SQL Server Express LocalDB, instálelo desde la página de descarga de SQL Server Express o mediante el Instalador de Visual Studio. En el instalador de Visual Studio , puede instalar SQL Server Express LocalDB como parte de la carga de trabajo de almacenamiento y procesamiento de datos , o como componente individual.
Instale la base de datos de ejemplo Northwind siguiendo estos pasos:
En Visual Studio, abra la ventana Explorador de objetos de SQL Server (Explorador de Objetos de SQL Server se instala como parte de la carga de trabajo Almacenamiento y Procesamiento de Datos en el Instalador de Visual Studio). Expanda el nodo SQL Server. Haga clic con el botón derecho en la instancia de LocalDB y seleccione Nueva consulta.
Se abre una ventana del editor de consultas.
Copie el script Northwind Transact-SQL en su Portapapeles. Este script de T-SQL crea la base de datos Northwind desde cero y la rellena con datos.
Pegue el script T-SQL en el editor de consultas y, a continuación, elija el botón Ejecutar.
Después de un breve tiempo, la consulta finaliza la ejecución y se crea la base de datos Northwind.
Creación de una aplicación y adición de clases LINQ to SQL
Dado que está trabajando con clases LINQ to SQL y mostrando los datos en un formulario Windows Forms, cree una nueva aplicación de Windows Forms y agregue un archivo LINQ to SQL Classes.
Nota:
Las instrucciones de este artículo muestran la versión más reciente de la experiencia de desarrollo interactiva (IDE) disponible en Visual Studio. El equipo puede mostrar nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario. Es posible que esté usando una versión diferente de Visual Studio o una configuración de entorno diferente. Para obtener más información, consulte Personalizar el IDE.
Para crear un nuevo proyecto de aplicación de Windows Forms que contenga clases LINQ to SQL
En Visual Studio, en el menú Archivo , seleccione Nuevo>proyecto.
Expanda Visual C# o Visual Basic en el panel izquierdo y, a continuación, seleccione Escritorio de Windows.
En el panel central, seleccione el tipo de proyecto Aplicación de Windows Forms .
Asigne al proyecto el nombre UpdatingWithSProcsWalkthrough y, a continuación, elija Aceptar.
Se crea el proyecto UpdatingWithSProcsWalkthrough y se agrega al Explorador de soluciones.
En el menú de proyecto , haga clic en Agregar Nuevo Elemento.
Haga clic en la plantilla LINQ to SQL Classes y escriba Northwind.dbml en el cuadro Nombre .
Haga clic en Agregar.
Se agrega un archivo de clases LINQ to SQL vacío (Northwind.dbml) al proyecto y se abre el Diseñador de O/R .
Creación de la clase de entidad "Cliente" y el origen de datos de objeto
Cree clases LINQ to SQL asignadas a tablas de base de datos arrastrando tablas desde el Explorador de servidores o el Explorador de bases de datos al Diseñador de O/R. El resultado serán las clases de entidad de LINQ to SQL que se asignan a las tablas en la base de datos. Después de crear clases de entidad, se pueden usar como orígenes de datos de objetos igual que otras clases que tienen propiedades públicas.
Para crear una clase Entidad de Cliente y configurar un origen de datos con ella
En el Explorador de servidores o en el Explorador de bases de datos, busque la tabla Customer en la versión de SQL Server de la base de datos de ejemplo Northwind.
Arrastre el nodo Clientes desde el Explorador de servidores o el Explorador de bases de datos hasta la superficie *Diseñador de O/R .
Se crea una clase de entidad denominada Customer . Tiene propiedades que corresponden a las columnas de la tabla Customers. La clase de entidad se denomina Customer (no Customers) porque representa un solo cliente de la tabla Customers.
Nota:
Este comportamiento de cambio de nombre se denomina pluralización. Se puede activar o desactivar en el cuadro de diálogo Opciones. Para obtener más información, vea Cómo: Activar y desactivar la pluralización (Diseñador de O/R).
En el menú Compilar, haga clic en Build UpdatingwithSProcsWalkthrough para compilar el proyecto.
Para abrir la ventana Orígenes de datos , en el menú Datos , haga clic en Mostrar orígenes de datos.
En la ventana Orígenes de datos, haga clic en Agregar nuevo origen de datos.
Haga clic en Objeto en la página Elegir un tipo de origen de datos y, a continuación, seleccione Siguiente.
Expanda el nodo UpdatingwithSProcsWalkthrough y 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 un DataGridView para mostrar los datos de los clientes en un formulario de Windows Forms.
Cree controles enlazados a clases de entidad arrastrando elementos de origen de datos LINQ to SQL desde la ventana Data Sources a un formulario de Windows Forms.
Para agregar controles enlazados a las clases de entidad
Abra Form1 en la vista Diseño.
En la ventana Orígenes de datos , arrastre el nodo Customer a Form1.
Nota:
Para mostrar la ventana Orígenes de datos , haga clic en Mostrar orígenes de datos en el menú Datos .
Abra Form1 en el Editor de código.
Agregue el código siguiente al formulario, global al formulario, fuera de cualquier método específico, pero dentro de la
Form1clase :Cree un controlador de eventos para el
Form_Loadevento y agregue el código siguiente al controlador:
Implementación de la funcionalidad de guardado
De forma predeterminada, el botón Guardar no está habilitado y no se implementa la funcionalidad guardar. Además, el código no se agrega automáticamente para guardar los datos modificados en la base de datos cuando se crean controles de datos enlazados para fuentes de datos de objetos. En esta sección se explica cómo habilitar el botón Guardar e implementar la funcionalidad de guardar para objetos LINQ to SQL.
Para implementar la funcionalidad de guardado
Abra Form1 en la vista Diseño.
Seleccione el botón Guardar en CustomerBindingNavigator (el botón con el icono de disco de 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 en el controlador de eventos del botón 'Guardar':
Invalide el comportamiento predeterminado para realizar actualizaciones (inserciones, actualizaciones y eliminaciones)
Para invalidar el comportamiento de actualización predeterminado
Abra el archivo LINQ to SQL en el Diseñador de O/R. (Haga doble clic en el archivo Northwind.dbml en el Explorador de soluciones).
En el Explorador de servidores o el Explorador de bases de datos, expanda el nodo Procedimientos almacenados de bases de datos Northwind y busque los procedimientos almacenados InsertCustomers, UpdateCustomers y DeleteCustomers .
Arrastre los tres procedimientos almacenados al Diseñador de O/R.
Los procedimientos almacenados se agregan al panel de métodos como DataContext métodos. Para obtener más información, vea Métodos de DataContext (Object Relational Designer).
Seleccione la clase de entidad Customer en el Diseñador de O/R.
En la ventana Propiedades , seleccione la propiedad Insertar .
Haga clic en los puntos suspensivos (...) junto a Usar tiempo de ejecución para abrir el cuadro de diálogo Configurar comportamiento .
Seleccione Personalizar.
Seleccione el método InsertCustomers en la lista Personalizar .
Haga clic en Aplicar para guardar la configuración de la clase y el comportamiento seleccionados.
Nota:
Puede seguir configurando el comportamiento de cada combinación de clase o comportamiento siempre que haga clic en Aplicar después de realizar cada cambio. Si cambia la clase o el comportamiento antes de hacer clic en Aplicar, aparece un cuadro de diálogo de advertencia que proporciona la oportunidad de aplicar los cambios.
Seleccione Actualizar en la lista Comportamiento .
Seleccione Personalizar.
Seleccione el método UpdateCustomers en la lista Personalizar .
Inspeccione 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. Esto facilita el rastreo de los cambios y la creación de declaraciones que comprueban si hay infracciones de simultaneidad.
Asigne el argumento del método Original_CustomerID a la propiedad de clase CustomerID (Original).
Nota:
De forma predeterminada, los argumentos del método se asignarán a las propiedades de clase cuando coincidan los nombres. Si se cambian los nombres de propiedad y ya no coinciden entre la tabla y la clase de entidad, es posible que tenga que seleccionar la propiedad de clase equivalente a la que asignar si el Diseñador de O/R no puede determinar la asignación correcta. Además, si los argumentos del método no tienen propiedades de clase válidas a las que asignar, puede establecer el valor propiedades de claseen (None).
Haga clic en Aplicar para guardar la configuración de la clase y el comportamiento seleccionados.
Seleccione Eliminar en la lista Comportamiento .
Seleccione Personalizar.
Seleccione el método DeleteCustomers en la lista Personalizar .
Asigne el argumento del método Original_CustomerID a la propiedad de clase CustomerID (Original).
Haz clic en Aceptar.
Nota:
Aunque no es un problema para este tutorial concreto, merece la pena señalar que LINQ to SQL controla automáticamente los valores generados por la base de datos para la identidad (incremento automático), rowguidcol (identificador único global generado por la base de datos (GUID)) y columnas de marca de tiempo durante las inserciones y actualizaciones. Los valores generados por la base de datos en otros tipos de columna producirán inesperadamente un valor NULL. Para devolver los valores generados por la base de datos, debe establecer IsDbGenerated manualmente en true y AutoSync en uno de los siguientes valores: AutoSync.Always, AutoSync.OnInsert o AutoSync.OnUpdate.
Prueba de la aplicación
Vuelva a ejecutar la aplicación para comprobar que el procedimiento almacenado UpdateCustomers actualiza correctamente el registro del cliente en la base de datos.
Presione F5.
Modifique un registro en la cuadrícula para probar el comportamiento de la actualización.
Agregue un nuevo registro para probar el comportamiento de inserción.
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 el registro actualizado y el registro recién insertado se conservan.
Elimine el nuevo registro que creó en el paso 3 para probar el comportamiento de eliminación.
Haga clic en el botón Guardar para enviar los cambios y quitar el registro eliminado de la base de datos.
Cierre el formulario .
Presione F5 y compruebe que el registro eliminado se quitó de la base de datos.
Nota:
Si la aplicación usa SQL Server Express Edition, dependiendo del valor de la propiedad Copiar en el directorio de salida del archivo de base de datos, es posible que los cambios no aparezcan al presionar F5 en el paso 10.
Pasos siguientes
En función de los requisitos de la aplicación, hay varios pasos que es posible que desee realizar después de crear clases de entidad LINQ to SQL. Algunas mejoras que podría realizar en esta aplicación incluyen lo siguiente:
Implemente la comprobación de simultaneidad durante las actualizaciones. Para información, consulte Introducción a la simultaneidad optimista.
Agregue consultas LINQ para filtrar los datos. Para obtener información, vea Introducción a las consultas LINQ (C#).