Tutorial: Personalizar la inserción, actualización y comportamiento de eliminación de las clases de entidadWalkthrough: Customize the insert, update, and delete behavior of entity classes

El de LINQ to SQL tools en Visual Studio proporciona una superficie de diseño visual para crear y editar LINQ a las clases SQL (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 SQL classes (entity classes) that are based on objects in a database. Mediante el uso de LINQ to SQL, puede usar la tecnología LINQ para las bases de datos SQL de acceso.By using LINQ to SQL, you can use LINQ technology to access SQL databases. Para obtener más información, consulte LINQ (Language Integrated query).For more information, see LINQ (Language-Integrated query).

De forma predeterminada, se proporciona la lógica para realizar actualizaciones por LINQ to SQL en tiempo de ejecución.By default, the logic to perform updates is provided by the LINQ to SQL runtime. El tiempo de ejecución crea de forma predeterminada Insert, Update, y Delete instrucciones según el esquema de la tabla (definiciones de columna e información de 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 desea usar el comportamiento predeterminado, puede configurar el comportamiento de actualización y designar procedimientos almacenados concretos para realizar las inserciones, actualizaciones y eliminaciones necesarias para trabajar con los datos en 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

En 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 learn how to perform the following tasks:

  • Cree una nueva aplicación de Windows Forms y agregue un LINQ al archivo SQL a él.Create a new Windows Forms application and add a LINQ to SQL file to it.

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

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

  • Crear un formulario de Windows que contenga un DataGridView que está enlazado a la Customer clase.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 DataContext los procedimientos almacenan de métodos agregando el Object Relational Designer.Create DataContext methods by adding stored procedures to the O/R Designer.

  • Configurar la Customer clase utilizar procedimientos almacenados para realizar inserciones, actualizaciones y eliminaciones.Configure the Customer class to use stored procedures to perform inserts, updates, and deletes.

Requisitos previosPrerequisites

En 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, instálelo de 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. En el instalador de Visual Studio, puede instalar SQL Server Express LocalDB como parte de la procesamiento y almacenamiento de datos carga de trabajo, o como un componente individual.In the Visual Studio Installer, you can install SQL Server Express LocalDB 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 procesamiento y almacenamiento de datos carga de trabajo en el instalador de Visual Studio.) Expanda el SQL Server nodo.(SQL Server Object Explorer installs 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 el script Transact-SQL de Northwind en el Portapapeles.Copy the Northwind Transact-SQL script to your clipboard. Este script de Transact-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 Transact-SQL en el editor de consultas y, a continuación, elija el Execute botón.Paste the T-SQL script into the query editor, and then choose the Execute button.

      Después de un breve tiempo, finalice la consulta y se crea la base de datos Northwind.After a short time, the query finishes running and the Northwind database is created.

Crear una aplicación y adición de LINQ a las clases SQLCreating an application and adding LINQ to SQL classes

Dado que se trabaja con LINQ a las clases SQL y mostrar los datos en un formulario de Windows, cree una nueva aplicación de Windows Forms y agregue un LINQ al archivo de clases de SQL.Because you are working with LINQ 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 el 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 use 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 Personalize 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 el Visual C# o Visual Basic en el panel izquierdo, seleccione Windows Desktop.Expand either Visual C# or Visual Basic in the left-hand pane, then select Windows 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 se crea y agrega al proyecto 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.

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

Crear el origen de datos de clase y objeto de entidad de clienteCreate the Customer entity class and object data source

Creación de LINQ a las clases SQL que se asignan a las tablas de base de datos arrastrando las tablas del Explorador de servidores o Database Explorer hasta la Object Relational Designer.Create LINQ to SQL classes that are mapped to database tables by dragging tables from Server Explorer or Database Explorer onto the O/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 o Database Explorer, busque el cliente tabla en la versión de SQL Server de la base de datos de ejemplo Northwind.In Server Explorer or 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 o Database Explorer en el *Object Relational Designer superficie.Drag the Customers node from Server Explorer or Database Explorer onto the *O/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) la pluralización.For more information, see How to: Turn pluralization on and off (O/R Designer).

  3. En el compilar 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 de WindowsCreate a DataGridView to display the customer data on a Windows Form

Crear controles enlazados a las clases de entidad arrastrando LINQ a elementos de origen de datos SQL desde el orígenes de datos ventana en un formulario de Windows.Create controls that are bound to entity classes by dragging LINQ 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 el cliente nodo hasta Form1.From the Data Sources window, drag the Customer node onto Form1.

    Nota

    Para mostrar el 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 el siguiente código al formulario, global para el formulario, fuera de cualquier método concreto, pero en el Form1 clase: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 guardarImplement 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 guardado botón e implementar funcionalidad de guardar para LINQ para objetos de SQL.This section explains how to enable the save button and implement save functionality for LINQ 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 Guardar situado en la CustomerBindingNavigator (el botón con el icono del 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)Override 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 LINQ to SQL en el Object Relational Designer.Open the LINQ to SQL file in the O/R Designer. (Haga doble clic en el Northwind.dbml archivo el Explorador de soluciones.)(Double-click the Northwind.dbml file in Solution Explorer.)

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

  3. Arrastre los tres procedimientos almacenados en el Object Relational Designer.Drag all three stored procedures onto the O/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 Designer.Select the Customer entity class in the O/R Designer.

  5. En el propiedades ventana, seleccione el 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 Use 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 seleccionada y el comportamiento.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, siempre haga 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 aplicar, que proporciona una oportunidad para aplicar cualquier cambio aparece un cuadro de diálogo de advertencia.If you change the class or behavior before you click Apply, a warning dialog box providing an opportunity to apply any changes appears.

  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 tenga en cuenta 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 del 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 los nombres de propiedad se cambiarán y ya no coinciden entre la tabla y la clase de entidad, es posible que deba seleccionar la propiedad de clase equivalente para la asignación como si el Object Relational Designer no se 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álido para asignar a, puede establecer el 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 seleccionada y el comportamiento.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 del 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 problema de este tutorial particular, es importante destacar que LINQ to SQL controla valores base de datos generados automáticamente para la identidad (incremento automático), rowguidcol (GUID generado por la base de datos) y las 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 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 base de datos, debe establecer manualmente IsDbGenerated a true y AutoSync a uno de los siguientes: AutoSync.Always, AutoSync.OnInsert, o AutoSync.OnUpdate.To return the database-generated values, you should manually set IsDbGenerated to true and AutoSync to one of the following: AutoSync.Always, AutoSync.OnInsert, or AutoSync.OnUpdate.

Probar la aplicaciónTest 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.

  1. Presione F5.Press F5.

  2. Modificar 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 recién insertado.Press F5 and verify that the updated record and the newly inserted record persisted.

  7. Elimine el nuevo registro que creó 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 Guardar para enviar los cambios y quitar el registro eliminado de la base de datos.Click 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 la aplicación usa SQL Server Express Edition, dependiendo del valor de la Copy to Output Directory propiedad del archivo de base de datos, los cambios no es posible que aparezcan 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 desee realizar después de crear LINQ a las clases de entity SQL.Depending on your application requirements, there are several steps that you may want to perform after you create LINQ 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