Asignación de procedimientos almacenados para realizar actualizaciones, inserciones y eliminaciones (Object Relational Designer)

Los procedimientos almacenados se pueden agregar a Object Relational Designer y ejecutar como métodos de DataContext normales. Se pueden usar también con el fin de invalidar el comportamiento predeterminado de LINQ to SQL en tiempo de ejecución para realizar inserciones, actualizaciones y eliminaciones cuando se guardan los cambios de las clases de entidad en una base de datos (por ejemplo, cuando se llama al método SubmitChanges).

Nota

Si el procedimiento almacenado devuelve valores que se deben devolver al cliente (por ejemplo, los valores calculados en el procedimiento almacenado), cree parámetros de salida en los procedimientos almacenados. Si no puede usar parámetros de salida, escriba una implementación de método parcial en lugar de confiar en las invalidaciones generadas por Object Relational Designer. Los miembros asignados a los valores generados por la base de datos deben establecerse en valores adecuados después de que se ejecuten correctamente las operaciones de INSERCIÓN o ACTUALIZACIÓN. Para obtener más información, consulte Responsabilidades del desarrollador al invalidar un comportamiento predeterminado.

Nota:

LINQ to SQL procesa automáticamente los valores generados por la base de datos para columnas identidad (incremento automático), rowguidcol ((GUID), identificador único global generado por la base de datos) y columnas con marca de tiempo. Los valores generados por la base de datos de otros tipos de columna producirán inesperadamente un valor nulo. Para devolver los valores generados por la base de datos, debe establecer IsDbGenerated manualmente en true y AutoSync en uno de los valores siguientes: AutoSync.Always, AutoSync.OnInsert o AutoSync.OnUpdate.

Configuración del comportamiento de actualización de una clase de entidad

De manera predeterminada, el runtime de LINQ to SQL proporciona la lógica para actualizar una base de datos (inserciones, actualizaciones y eliminaciones) con los cambios realizados en los datos de las clases de entidad de LINQ to SQL. El motor en tiempo de ejecución crea los comandos predeterminados INSERT, UPDATE y DELETE basándose en el esquema de la tabla (información de columna y de clave principal). Cuando no se desea usar el comportamiento predeterminado, se puede configurar el comportamiento de actualización asignando procedimientos almacenados concretos para realizar las inserciones, actualizaciones y eliminaciones necesarias para poder manipular los datos en la tabla. 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. Por último, 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

Es posible que el equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario de Visual Studio en este artículo. Puede que esté usando una edición diferente de Visual Studio u otra configuración del entorno. Para obtener más información, vea Personalizar el IDE.

Para asignar procedimientos almacenados con el fin de invalidar el comportamiento predeterminado de una clase de entidad

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

  2. En el Explorador de servidores o Explorador de bases de datos, expanda Procedimientos almacenados y busque los procedimientos almacenados que desee usar para los comandos Insertar, Actualizar y/o Eliminar de la clase de entidad.

  3. Arrastre el procedimiento almacenado hasta Object Relational Designer.

    El procedimiento almacenado se agrega al panel de métodos como un método de DataContext. Para obtener más información, consulta Métodos de DataContext (Object Relational Designer).

  4. Seleccione la clase de entidad para la que desee usar el procedimiento almacenado para realizar las actualizaciones.

  5. En la ventana Propiedades, seleccione el comando que desee invalidar (Insertar, Actualizar o Eliminar).

  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 procedimiento almacenado que desee en la lista Personalizar.

  9. Examine la lista de Argumentos de método y Propiedades de clase para comprobar que los Argumentos de método se asignan a las Propiedades de clase adecuadas. Asigne los argumentos del método original (Original_<ArgumentName>) a las propiedades originales (<PropertyName> (Original)) para los comandos Update y Delete.

    Nota

    De forma predeterminada, los argumentos de método se asignan a las propiedades de clase cuando los nombres coinciden. Si los nombres de propiedad modificados ya no coinciden 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.

  10. Haga clic en Aceptar o en Aplicar.

    Nota

    Puede continuar configurando el comportamiento de cada clase y la combinación de comportamientos siempre que haga clic en Aplicar después de realizar cada modificación. Si cambia la clase o el comportamiento antes de hacer clic en Aplicar, aparecerá un cuadro de diálogo de advertencia y le dará una oportunidad para aplicar los cambios.

Para revertir a la lógica predeterminada del motor en tiempo de ejecución para las actualizaciones, haga clic en los puntos suspensivos junto a los comandos Insertar, Actualizar o Eliminar en la ventana Propiedades y después seleccione Usar motor en tiempo de ejecución en el cuadro de diálogo Configurar comportamiento.