Tutorial: Personalizar la instrucción insert, update y delete de comportamiento de las clases de entidadWalkthrough: Customizing the insert, update, and delete behavior of entity classes

El LINQ to SQL Tools en Visual Studio proporciona una superficie de diseño visual para crear y editar LINQ to SQLLINQ to SQL clases (las clases de entidad) que se basan en los objetos de una base de datos.The LINQ to SQL Tools in Visual Studio provides a visual design surface for creating and editing LINQ to SQLLINQ to SQL classes (entity classes) that are based on objects in a database. Mediante el uso de LINQ to SQL, puede utilizar la tecnología LINQ a las bases de datos SQL de acceso.By using LINQ to SQL, you can use LINQ technology to access SQL databases. Para más información, consulte LINQ (Language Integrated Query).For more information, see LINQ (Language-Integrated Query).

El motor en tiempo de ejecución LINQ to SQLLINQ to SQL proporciona, de forma predeterminada, la lógica para realizar actualizaciones.By default, the logic to perform updates is provided by the LINQ to SQLLINQ to SQL runtime. El motor en tiempo de ejecución crea las instrucciones predeterminadas de inserción, actualización y eliminación basándose en el esquema de la tabla (definiciones de columna e información de la clave principal).The runtime creates default Insert, Update, and Delete statements based on the schema of the table (the column definitions and primary key information). 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 trabajar con los datos de la base de datos.When you do not want to use the default behavior, you can configure the update behavior and designate specific stored procedures for performing the necessary Inserts, Updates, and Deletes required to work with the data in the database. 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.You can also do this when the default behavior is not generated, for example, when your entity classes map to views. 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.Additionally, you can override the default update behavior when the database requires table access through stored procedures. Para obtener más información, consulte personalizar operaciones utilizando procedimientos almacenados.For more information, see Customizing Operations By Using Stored Procedures.

Nota

Este tutorial requiere la disponibilidad de la InsertCustomer, UpdateCustomer, y DeleteCustomer procedimientos almacenados para la base de datos Northwind.This walkthrough requires the availability of the InsertCustomer, UpdateCustomer, and DeleteCustomer stored procedures for the Northwind database.

En este tutorial se proporcionan los pasos que se deben seguir para invalidar el comportamiento predeterminado del motor en tiempo de ejecución LINQ to SQL y volver a guardar los datos en una base de datos mediante procedimientos almacenados.This walkthrough provides the steps that you must follow to override the default LINQ to SQL runtime behavior for saving data back to a database by using stored procedures.

Durante este tutorial, aprenderá a realizar las siguientes tareas:During this walkthrough, you will learn how to perform the following tasks:

  • Crear una nueva aplicación de Windows Forms y agregarle un archivo de LINQ to SQLLINQ to SQL.Create a new Windows Forms application and add a LINQ to SQLLINQ to SQL file to it.

  • Crear una clase de entidad asignada a la tabla Customers de Northwind.Create an entity class that is mapped to the Northwind Customers table.

  • Crear un origen de datos de objeto que haga referencia a la clase Customer de LINQ to SQL.Create an object data source that references the LINQ to SQL Customer class.

  • Crear un formulario Windows Forms con un control DataGridView enlazado a la clase Customer.Create a Windows Form that contains a DataGridView that is bound to the Customer class.

  • Implementar la funcionalidad de guardar para el formulario.Implement save functionality for the form.

  • Crear los métodos de DataContext agregando procedimientos almacenados al Object Relational DesignerO/R Designer.Create DataContext methods by adding stored procedures to the Object Relational DesignerO/R Designer.

  • Configurar la clase Customer de modo que se usen los procedimientos almacenados para realizar inserciones, actualizaciones y eliminaciones.Configure the Customer class to use stored procedures to perform Inserts, Updates, and Deletes.

Requisitos previosPrerequisites

Este tutorial usa SQL Server Express LocalDB y la base de datos de ejemplo Northwind.This walkthrough uses SQL Server Express LocalDB and the Northwind sample database.

  1. Si no tiene SQL Server Express LocalDB, puede instalarlo desde el página de descarga de SQL Server Express, o a través del instalador de Visual Studio.If you don't have SQL Server Express LocalDB, install it either from the SQL Server Express download page, or through the Visual Studio Installer. El instalador de Visual Studio, se puede instalar SQL Server Express LocalDB como parte de la almacenamiento de datos y el procesamiento carga de trabajo, o como un componente individual.In the Visual Studio Installer, SQL Server Express LocalDB can be installed as part of the Data storage and processing workload, or as an individual component.

  2. Instalar la base de datos de ejemplo Northwind, siga estos pasos:Install the Northwind sample database by following these steps:

    1. En Visual Studio, abra el Explorador de objetos de SQL Server ventana.In Visual Studio, open the SQL Server Object Explorer window. (Explorador de objetos de SQL Server se instala como parte de la almacenamiento de datos y el procesamiento carga de trabajo en el instalador de Visual Studio.) Expanda el SQL Server nodo.(SQL Server Object Explorer is installed as part of the Data storage and processing workload in the Visual Studio Installer.) Expand the SQL Server node. Haga doble clic en la instancia de LocalDB y seleccione nueva consulta... .Right-click on your LocalDB instance and select New Query....

      Se abre una ventana del editor de consultas.A query editor window opens.

    2. Copia la script Transact-SQL de Northwind en el Portapapeles.Copy the Northwind Transact-SQL script to your clipboard. Este script de T-SQL crea la base de datos Northwind desde el principio y lo rellena con datos.This T-SQL script creates the Northwind database from scratch and populates it with data.

    3. Pegue el script de T-SQL en el editor de consultas y, a continuación, elija la Execute botón.Paste the T-SQL script into the query editor, and then choose the Execute button.

      Después de unos minutos, finaliza la ejecución de la consulta y se crea la base de datos Northwind.After a short time, the query finishes executing and the Northwind database is created.

Crear una aplicación y agregar clases de LINQ to SQLCreating an Application and Adding LINQ to SQL Classes

Dado que va a trabajar con clases de LINQ to SQLLINQ to SQL y mostrar los datos en un Windows Form, cree una nueva aplicación de Windows Forms y agregue un archivo de clases de LINQ to SQL.Because you will be working with LINQ to SQLLINQ to SQL classes and displaying the data on a Windows Form, create a new Windows Forms application and add a LINQ to SQL Classes file.

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.Your computer might show different names or locations for some of the Visual Studio user interface elements in the following instructions. La edición de Visual Studio que se tenga y la configuración que se utilice determinan estos elementos.The Visual Studio edition that you have and the settings that you use determine these elements. Para obtener más información, vea Personalizar el IDE.For more information, see Personalizing the IDE.

Para crear un nuevo proyecto de aplicación de Windows Forms que contiene LINQ a las clases SQLTo create a new Windows Forms Application project that contains LINQ to SQL classes

  1. En Visual Studio, en el archivo menú, seleccione New, proyecto... .In Visual Studio, on the File menu, select New, Project....

  2. Expanda Visual C# o Visual Basic en el panel izquierdo, seleccione escritorio clásico de Windows.Expand either Visual C# or Visual Basic in the left-hand pane, then select Windows Classic Desktop.

  3. En el panel central, seleccione la aplicación de Windows Forms tipo de proyecto.In the middle pane, select the Windows Forms App project type.

  4. Denomine el proyecto UpdatingWithSProcsWalkthroughy, a continuación, elija Aceptar.Name the project UpdatingWithSProcsWalkthrough, and then choose OK.

    El UpdatingWithSProcsWalkthrough proyecto se crea y se agrega a el Explorador de soluciones.The UpdatingWithSProcsWalkthrough project is created, and added to Solution Explorer.

  5. En el menú Proyecto , haga clic en Agregar nuevo elemento.On the Project menu, click Add New Item.

  6. Haga clic en el clases LINQ to SQL plantilla y escriba Northwind.dbml en el nombre cuadro.Click the LINQ to SQL Classes template and type Northwind.dbml in the Name box.

  7. Haga clic en Agregar.Click Add.

    Se agrega al proyecto un archivo de clases de LINQ to SQL vacío (Northwind.dbml) y se abre el Object Relational DesignerO/R Designer.An empty LINQ to SQL Classes file (Northwind.dbml) is added to the project, and the Object Relational DesignerO/R Designer opens.

Crear la clase de entidad Customer y el origen de datos de objetoCreating the Customer Entity Class and Object Data Source

Crear LINQ to SQLLINQ to SQL las clases que se asignan a tablas de base de datos arrastrando las tablas de Explorador de servidores/el Explorador de base de datos en el Object Relational DesignerO/R Designer.Create LINQ to SQLLINQ to SQL classes that are mapped to database tables by dragging tables from Server Explorer/Database Explorer onto the Object Relational DesignerO/R Designer. El resultado serán las clases de entidad de LINQ to SQL que se asignan a las tablas en la base de datos.The result is LINQ to SQL entity classes that map to the tables in the database. Después de crear las clases de entidad, éstas se pueden usar como orígenes de datos de objeto igual que cualquier otra clase que tenga propiedades públicas.After you create entity classes, they can be used as object data sources just like other classes that have public properties.

Para crear una clase de entidad Customer y configurar con ella un origen de datosTo create a Customer entity class and configure a data source with it

  1. En Explorador de servidores/el Explorador de base de datos, busque la tabla Customer en la versión de SQL Server de la base de datos de ejemplo Northwind.In Server Explorer/Database Explorer, locate the Customer table in the SQL Server version of the Northwind sample database.

  2. Arrastre el clientes nodo desde Explorador de servidores/el Explorador de base de datos en el Object Relational DesignerO/R Designer superficie.Drag the Customers node from Server Explorer/Database Explorer onto the Object Relational DesignerO/R Designer surface.

    Una clase de entidad denominada cliente se crea.An entity class named Customer is created. Dicha clase tiene propiedades que corresponden a las columnas de la tabla Customers.It has properties that correspond to the columns in the Customers table. La clase de entidad se denomina cliente (no clientes) porque representa un único cliente de la tabla Customers.The entity class is named Customer (not Customers) because it represents a single customer from the Customers table.

    Nota

    Este comportamiento de cambio de nombre se denomina pluralización.This renaming behavior is called pluralization. Se puede activar o desactivar el cuadro de diálogo Opciones.It can be turned on or off in the Options Dialog Box. Para obtener más información, consulte Cómo: activar y desactivar (Object Relational Designer) pluralización.For more information, see How to: Turn pluralization on and off (O/R Designer).

  3. En el generar menú, haga clic en generar UpdatingwithSProcsWalkthrough para compilar el proyecto.On the Build menu, click Build UpdatingwithSProcsWalkthrough to build the project.

  4. En el menú Datos , haga clic en Mostrar orígenes de datos.On the Data menu, click Show Data Sources.

  5. En la ventana Orígenes de datos , seleccione Agregar nuevo origen de datos.In the Data Sources window, click Add New Data Source.

  6. Haga clic en objeto en el elegir un tipo de origen de datos página y, a continuación, haga clic en siguiente.Click Object on the Choose a Data Source Type page and then click Next.

  7. Expanda el UpdatingwithSProcsWalkthrough nodo y busque y seleccione el cliente clase.Expand the UpdatingwithSProcsWalkthrough node and locate and select the Customer class.

    Nota

    Si el cliente clase no está disponible, cancele el asistente, compile el proyecto y vuelva a ejecutar el asistente.If the Customer class is not available, cancel out of the wizard, build the project, and run the wizard again.

  8. Haga clic en finalizar para crear el origen de datos y agregar el cliente clase de entidad para el orígenes de datos ventana.Click Finish to create the data source and add the Customer entity class to the Data Sources window.

Crear un control DataGridView para mostrar los datos del cliente en un formulario Windows FormsCreating a DataGridView to Display the Customer Data on a Windows Form

Crear controles que están enlazados a las clases de entidad arrastrando LINQ to SQLLINQ to SQL elementos de origen de datos la orígenes de datos ventana en un formulario Windows Forms.Create controls that are bound to entity classes by dragging LINQ to SQLLINQ to SQL data source items from the Data Sources window onto a Windows Form.

Para agregar controles enlazados a las clases de entidadTo add controls that are bound to the entity classes

  1. Abra Form1 en la vista Diseño.Open Form1 in Design view.

  2. Desde el orígenes de datos ventana, arrastre la cliente nodo hasta Form1.From the Data Sources window, drag the Customer node onto Form1.

    Nota

    Para mostrar la orígenes de datos ventana, haga clic en Mostrar orígenes de datos en el datos menú.To display the Data Sources window, click Show Data Sources on the Data menu.

  3. Abra Form1 en el Editor de código.Open Form1 in the Code Editor.

  4. Agregue al formulario el código siguiente, global para el formulario, fuera de cualquier método concreto, pero dentro de la clase Form1:Add the following code to the form, global to the form, outside any specific method, but inside the Form1 class:

    Private NorthwindDataContext1 As New NorthwindDataContext  
    
    private NorthwindDataContext northwindDataContext1  
        = new NorthwindDataContext();    
    
  5. Cree un controlador de eventos para el evento Form_Load y agregue el código siguiente al controlador:Create an event handler for the Form_Load event and add the following code to the handler:

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

Implementar la funcionalidad de guardarImplementing Save Functionality

De forma predeterminada, el botón Guardar no está habilitado y la funcionalidad de guardar no está implementada.By default, the save button is not enabled and save functionality is not implemented. Además, no se agrega automáticamente código para guardar los datos modificados en la base de datos cuando se crean controles enlazados a datos para los orígenes de datos de objeto.Also, code is not automatically added to save changed data to the database when data-bound controls are created for object data sources. 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 SQLLINQ to SQL.This section explains how to enable the save button and implement save functionality for LINQ to SQLLINQ to SQL objects.

Para implementar la funcionalidad de guardarTo implement save functionality

  1. Abra Form1 en la vista Diseño.Open Form1 in Design view.

  2. Seleccione la operación de guardar situado en la CustomerBindingNavigator (el botón con el icono de disquete).Select the save button on the CustomerBindingNavigator (the button with the floppy disk icon).

  3. En el propiedades ventana, establezca el habilitado propiedad True.In the Properties window, set the Enabled property to True.

  4. Haga doble clic en el botón Guardar para crear un controlador de eventos y cambiar al Editor de código.Double-click the save button to create an event handler and switch to the Code Editor.

  5. Agregue el código siguiente al controlador de eventos del botón Guardar:Add the following code into the save button event handler:

    NorthwindDataContext1.SubmitChanges()  
    
    northwindDataContext1.SubmitChanges();  
    

Invalidar el comportamiento predeterminado para realizar actualizaciones (inserciones, actualizaciones y eliminaciones)Overriding the Default Behavior for Performing Updates (Inserts, Updates, and Deletes)

Para invalidar el comportamiento de actualización predeterminadoTo override the default update behavior

  1. Abra el archivo de LINQ to SQL en el Object Relational DesignerO/R Designer.Open the LINQ to SQL file in the Object Relational DesignerO/R Designer. (Haga doble clic en el Northwind.dbml en el archivo el Explorador de soluciones.)(Double-click the Northwind.dbml file in Solution Explorer.)

  2. En Explorador de servidores/el Explorador de base de datos, expanda las bases de datos de Northwind procedimientos almacenados nodo y busque el InsertCustomers, UpdateCustomers, y DeleteCustomers procedimientos almacenados.In Server Explorer/Database Explorer, expand the Northwind databases Stored Procedures node and locate the InsertCustomers, UpdateCustomers, and DeleteCustomers stored procedures.

  3. Arrastre los tres procedimientos almacenados al Object Relational DesignerO/R Designer.Drag all three stored procedures onto the Object Relational DesignerO/R Designer.

    Los procedimientos almacenados se agregan al panel de métodos como métodos de DataContext.The stored procedures are added to the methods pane as DataContext methods. Para obtener más información, consulte métodos DataContext (Object Relational Designer).For more information, see DataContext Methods (O/R Designer).

  4. Seleccione el cliente clase de entidad en el Object Relational DesignerO/R Designer.Select the Customer entity class in the Object Relational DesignerO/R Designer.

  5. En el propiedades ventana, seleccione la insertar propiedad.In the Properties window, select the Insert property.

  6. Haga clic en el botón de puntos suspensivos (...) junto a en tiempo de ejecución de uso para abrir el configurar comportamiento cuadro de diálogo.Click the ellipsis (...) next to Use Runtime to open the Configure Behavior dialog box.

  7. Seleccione personalizar.Select Customize.

  8. Seleccione el InsertCustomers método en el personalizar lista.Select the InsertCustomers method in the Customize list.

  9. Haga clic en aplicar para guardar la configuración de la clase y comportamiento seleccionados.Click Apply to save the configuration for the selected Class and Behavior.

    Nota

    Puede seguir configurar el comportamiento para cada combinación de clase y comportamiento mientras hace clic en aplicar después de realizar cada modificación.You can continue to configure the behavior for each class/behavior combination as long as you click Apply after you make each change. Si cambia la clase o el comportamiento antes de hacer clic en aplicar, un cuadro de diálogo de advertencia que aparecerá una oportunidad para aplicar los cambios.If you change the class or behavior before you click Apply, a warning dialog box providing an opportunity to apply any changes will appear.

  10. Seleccione actualización en el comportamiento lista.Select Update in the Behavior list.

  11. Seleccione personalizar.Select Customize.

  12. Seleccione el UpdateCustomers método en el personalizar lista.Select the UpdateCustomers method in the Customize list.

    Examine la lista de argumentos de método y propiedades de la clase y observe que hay dos argumentos de método y dos propiedades de la clasepara algunas columnas de la tabla.Inspect the list of Method Arguments and Class Properties and notice that there are two Method Arguments and two Class Properties for some columns in the table. De esta manera, resulta más fácil realizar un seguimiento de los cambios y crear instrucciones que comprueben las infracciones de simultaneidad.This makes it easier to track changes and create statements that check for concurrency violations.

  13. Mapa de la Original_CustomerID argumento de método para el CustomerID (Original) propiedad de clase.Map the Original_CustomerID method argument to the CustomerID (Original) class property.

    Nota

    De forma predeterminada, los argumentos de método se asignarán a las propiedades de clase cuando los nombres coincidan.By default, method arguments will map to class properties when the names match. 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 Object Relational Designer no puede determinar la asignación correcta.If property names are changed and no longer match between the table and the entity class, you might have to select the equivalent class property to map to if the O/R Designer cannot determine the correct mapping. Además, si los argumentos de método no tienen propiedades de clase válida para asignar a, puede establecer la propiedades de la clase valor (ninguno).Additionally, if method arguments do not have valid class properties to map to, you can set the Class Properties value to (None).

  14. Haga clic en aplicar para guardar la configuración de la clase y comportamiento seleccionados.Click Apply to save the configuration for the selected Class and Behavior.

  15. Seleccione eliminar en el comportamiento lista.Select Delete in the Behavior list.

  16. Seleccione personalizar.Select Customize.

  17. Seleccione el DeleteCustomers método en el personalizar lista.Select the DeleteCustomers method in the Customize list.

  18. Mapa de la Original_CustomerID argumento de método para el CustomerID (Original) propiedad de clase.Map the Original_CustomerID method argument to the CustomerID (Original) class property.

  19. Haga clic en Aceptar.Click OK.

Nota

Aunque no es un asunto de este tutorial particular, vale la pena observar que LINQ to SQLLINQ to SQL procesa los valores generados por la base de datos automáticamente para las columnas identidad (incremento automático), rowguidcol (GUID generado por la base de datos) y columnas de marca de tiempo durante las inserciones y actualizaciones.Although it is not an issue for this particular walkthrough, it is worth noting that LINQ to SQLLINQ to SQL handles database-generated values automatically for identity (auto-increment), rowguidcol (database-generated GUID), and timestamp columns during Inserts and Updates. Los valores generados por la base de datos de otros tipos de columna producirán inesperadamente un valor nulo.Database-generated values in other column types will unexpectedly result in a null value. Para devolver los valores generados por la base de datos, debería establecer manualmente IsDbGenerated en true, y AutoSync en una de las siguientes opciones: AutoSync, AutoSync u AutoSync.To return the database-generated values, you should manually set IsDbGenerated to true and AutoSync to one of the following: AutoSync, AutoSync, or AutoSync.

Probar la aplicaciónTesting the application

Ejecute la aplicación para comprobar que la UpdateCustomers procedimiento almacenado actualiza correctamente el registro de cliente en la base de datos.Run the application again to verify that the UpdateCustomers stored procedure correctly updates the customer record in the database.

Para probar la aplicaciónTo test the application

  1. Presione F5.Press F5.

  2. Modifique un registro en la cuadrícula para probar el comportamiento de actualización.Modify a record in the grid to test the Update behavior.

  3. Agregue un nuevo registro para probar el comportamiento de inserción.Add a new record to test the Insert behavior.

  4. Haga clic en el botón Guardar para volver a guardar los cambios en la base de datos.Click the save button to save changes back to the database.

  5. Cierre el formulario.Close the form.

  6. Presione F5 y compruebe que se conservan el registro actualizado y el registro que se acaba de insertar.Press F5 and verify that the updated record and the newly inserted record persisted.

  7. Elimine el nuevo registro creado en el paso 3 para probar el comportamiento de eliminación.Delete the new record you created in step 3 to test the Delete behavior.

  8. Haga clic en el botón Guardar para enviar los cambios y quitar el registro eliminado de la base de datosClick the save button to submit the changes and remove the deleted record from the database

  9. Cierre el formulario.Close the form.

  10. Presione F5 y compruebe que el registro eliminado se quitó de la base de datos.Press F5 and verify that the deleted record was removed from the database.

    Nota

    Si su aplicación utiliza SQL Server Express Edition, dependiendo del valor de la copiar en el directorio de salida propiedad del archivo de base de datos, los cambios no pueden aparecer al presionar F5 en el paso 10.If your application uses SQL Server Express Edition, depending on the value of the Copy to Output Directory property of the database file, the changes may not appear when you press F5 in step 10.

Pasos siguientesNext steps

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 SQLLINQ to SQL.Depending on your application requirements, there are several steps that you may want to perform after you create LINQ to SQLLINQ to SQL entity classes. Entre las mejoras que podría realizar a esta aplicación se incluyen:Some enhancements you could make to this application include the following:

Vea tambiénSee also

Herramientas LINQ to SQL en Visual StudioLINQ to SQL Tools in Visual Studio
DataContext (métodos)DataContext methods
Cómo: asignar procedimientos almacenados para realizar actualizaciones, inserciones y eliminacionesHow to: Assign stored procedures to perform updates, inserts, and deletes
LINQ to SQLLINQ to SQL
Consultas LINQ to SQLLINQ to SQL queries