Compartir a través de


Simultaneidad optimista: Información general

LINQ to SQL admite el control de simultaneidad optimista. En la tabla siguiente se describen los términos que se aplican a la simultaneidad optimista en la documentación de LINQ to SQL:

Términos Descripción
simultaneidad Situación en la que dos o más usuarios al mismo tiempo intentan actualizar la misma fila de base de datos.
conflicto de simultaneidad Situación en la que dos o más usuarios al mismo tiempo intentan enviar valores en conflicto a una o varias columnas de una fila.
control de simultaneidad Técnica que se usa para resolver conflictos de simultaneidad.
control de simultaneidad optimista La técnica que primero investiga si otras transacciones han cambiado valores en una fila antes de permitir que se envíen los cambios.

Contraste con el control de simultaneidad pesimista, que bloquea el registro para evitar conflictos de simultaneidad.

El control optimista se denomina así porque considera que es poco probable que una transacción interfiera con otra.
resolución de conflictos Proceso de actualización de un elemento en conflicto consultando de nuevo la base de datos y, a continuación, reconciliando las diferencias.

Cuando se actualiza un objeto, el seguimiento de cambios de LINQ to SQL contiene los datos siguientes:

: los valores obtenidos originalmente de la base de datos y usados para la comprobación de actualizaciones.
: los nuevos valores de base de datos de la consulta posterior.

Después, LINQ to SQL determina si el objeto está en conflicto (es decir, si uno o varios de sus valores de miembro han cambiado). Si el objeto está en conflicto, LINQ to SQL determina a continuación cuáles de sus miembros están en conflicto.

Cualquier conflicto de miembro que LINQ to SQL detecte se agrega a una lista de conflictos.

En el modelo de objetos de LINQ to SQL, se produce un conflicto de simultaneidad optimista cuando se cumplen las dos condiciones siguientes:

  • El cliente intenta enviar cambios a la base de datos.

  • Uno o varios valores de comprobación de actualizaciones se han actualizado en la base de datos desde que el cliente los leyó por última vez.

La resolución de este conflicto incluye detectar qué miembros del objeto están en conflicto y, a continuación, decidir lo que desea hacer sobre él.

Nota:

Solo los miembros asignados como Always o WhenChanged participan en comprobaciones de simultaneidad optimista. No se realiza ninguna comprobación para los miembros marcados como Never. Para obtener más información, consulte UpdateCheck.

Ejemplo

Por ejemplo, en el escenario siguiente, User1 comienza a preparar una actualización consultando la base de datos de una fila. User1 recibe una fila con valores de Alfreds, Maria y Sales.

User1 quiere cambiar el valor de la columna Manager a Alfred y el valor de la columna Departamento a Marketing. Para que User1 pueda enviar esos cambios, User2 ha enviado los cambios a la base de datos. Por lo tanto, el valor de la columna Assistant se ha cambiado a Mary y el valor de la columna Department (Departamento) a Service (Servicio).

Cuando User1 intenta enviar cambios, se produce un error en el envío y se produce una ChangeConflictException excepción. Este resultado se produce porque los valores de la base de datos de la columna Assistant y la columna Department no son los esperados. Los miembros que representan las columnas Assistant y Department están en conflicto. En la tabla siguiente se resume la situación.

Estado Administrador Asistente Departamento
Estado original Alfreds María Ventas
User1 Alfred Mercadotecnia
User2 María Servicio

Puede resolver conflictos como este de maneras diferentes. Para obtener más información, vea Cómo: Administrar conflictos de cambios.

Lista de comprobación de detección y resolución de conflictos

Puede detectar y resolver conflictos en cualquier nivel de detalle. En un extremo, puede resolver todos los conflictos de una de estas tres maneras (consulte RefreshMode) sin tener en cuenta más. En el otro extremo, puede designar una acción específica para cada tipo de conflicto en cada miembro en conflicto.

Tipos LINQ to SQL que admiten detección y resolución de conflictos

Las clases y características para admitir la resolución de conflictos en la simultaneidad optimista en LINQ to SQL incluyen lo siguiente:

Consulte también