¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. C# 10
  3. LINQ to SQL
Extrait - C# 10 Desarrolle aplicaciones Windows con Visual Studio 2022
Extractos del libro
C# 10 Desarrolle aplicaciones Windows con Visual Studio 2022
4 opiniones
Volver a la página de compra del libro

LINQ to SQL

La creación de clases LINQ to SQL

LINQ to SQL es un sistema que permite tener clases fuertemente tipadas para el acceso a los datos almacenados en SQL Server. LINQ utiliza las relaciones entre las tablas de la base de datos para cargar datos en los objetos, listos para ser utilizados por el código. LINQ to SQL no es solo útil para la extracción de datos, también permite realizar inserciones, actualizaciones y eliminación de datos.

Visual Studio facilita la creación de clases LINQ to SQL mediante un diseñador de objetos relacionales que permite crear visualmente objetos y definir sus relaciones. Para beneficiarse de los modelos utilizados en este capítulo, debe instalar Herramientas LINQ to SQL desde el instalador de Visual Studio, en la pestaña Componentes individuales en la sección Herramientas de código.

Cree una carpeta nueva llamada LinqToSql en el proyecto Database y agregue un nuevo elemento Clases de LINQ to SQL llamado SelfMailer.dbml.

images/cap21_img_01.png

Visual Studio agrega el archivo al proyecto y lo abre en el diseñador de objetos relacionales.

También se incluye la referencia a la librería System.Data.Linq.

Abra el Explorador de servidores y arrastre las tres tablas (MailServers, MailServerSender y Senders) de la base de datos SelfMailer hacia el diseñador de objetos relacionales:

images/cap21_img_02.png

Visual Studio analiza las tablas, sus relaciones y sus columnas para crear las clases...

El objeto DataContext

La clase SelfMailerDataContext se encarga de gestionar las conexiones con la base de datos para la ejecución de las consultas. Deriva de la clase DataContext. Antes de poder ejecutar consultas en una base de datos, se debe instanciar un nuevo objeto DataContext del tipo deseado. Esta instanciación se puede hacer sin argumentos. La cadena de conexión que se utiliza será la especificada en las propiedades de la clase LINQ to SQL:

images/cap21_img_03.png

La instanciación del objeto DataContext se hace preferentemente dentro de una cláusula using, de manera que los recursos del objeto se liberen:

// Uso de la cláusula using  
using (SelfMailerDataContext context = new   
SelfMailerDataContext())  
{  
    ...  
}  
  
// Sin cláusula using, el objeto se  debe liberar explícitamente  
SelfMailerDataContext context = new SelfMailerDataContext();  
...  
context.Dispose(); 

1. El método ExecuteQuery

La manera más rápida de ejecutar una consulta es usar el método ExecuteQuery<T> del objeto DataContext. La instrucción que permite recuperar todos los registros de una tabla es la siguiente:

IEnumerable<MailServers> query1 = context  
           .ExecuteQuery<MailServers>(  
         ...

Ejecutar las consultas con LINQ

Las consultas LINQ permiten tener una sintaxis tipada. Esta sintaxis se evalúa en tiempo de compilación de la aplicación, a diferencia de las consultas en forma de cadena de caracteres, realizadas con el método ExecuteQuery<T> del objeto DataContext, que solo generarán un error durante la ejecución y transmisión de la consulta la base de datos.

Las consultas LINQ to SQL siguen los mismos principios de la sintaxis LINQ general.

1. Las consultas sencillas

Las consultas sencillas se realizan mediante una cláusula from y una cláusula select:

var query = from ms in context.MailServers  
            select ms; 

En este ejemplo, se asigna al objeto query la colección de registros de la tabla MailServers.

2. Las consultas filtradas

La cláusula where permite filtrar los datos que serán devueltos:

var query = from ms in context.MailServers  
            where ms.Password_AllowSave == true  
            select ms; 

En este ejemplo, se asigna al objeto query la colección de registros de la tabla MailServers con valor true en la columna Password_AllowSave.

3. Los joins

El join entre varias tablas se realiza mediante la cláusula join:

var query = from ms in context.MailServers  
            join...

Los procedimientos almacenados

Agregue el siguiente procedimiento almacenado a la base de datos:

CREATE PROCEDURE dbo.GetLinkedMailServersSenders  
    (@MailServerID int = 0)  
AS  
    SELECT ms.*, s.*  
    FROM MailServers AS ms  
    INNER JOIN MailServerSender AS mss  
           ON ms.ID = mss.MailServer_ID  
    INNER JOIN Senders AS s  
           ON mss.Sender_ID = s.ID  
    WHERE ms.ID = @MailServerID 

Este procedimiento almacenado permite recuperar los registros de las tablas MailServers y Senders que están relacionadas en función del identificador de un registro.

1. La adición de procedimientos almacenados al modelo

Para añadir un procedimiento almacenado al modelo de datos basta con seleccionarlo y, a continuación, arrastrarlo desde el Explorador de servidores hacia el diseñador de objetos relacionales:

images/cap21_img_04.png

Visual Studio añade un método con el nombre del procedimiento almacenado al objeto que deriva de DataContext. Los argumentos del método también se declaran en función de los argumentos del procedimiento almacenado:

[global::System.Data.Linq.Mapping.FunctionAttribute  
(Name="dbo.GetLinkedMailServersSenders")]  
public ISingleResult<GetLinkedMailServersSendersResult>...