Compartir a través de


Responsabilidades del desarrollador al invalidar el comportamiento predeterminado

LINQ to SQL no aplica los siguientes requisitos, pero el comportamiento no está definido si no se cumplen estos requisitos.

  • El método de invalidación no debe llamar a SubmitChanges o Attach. LINQ to SQL produce una excepción si se llama a estos métodos en un método de invalidación.

  • Los métodos de invalidación no se pueden usar para iniciar, confirmar ni detener una transacción. La operación SubmitChanges se realiza bajo una transacción. Una transacción anidada interna puede interferir con la transacción externa. Los métodos de invalidación de carga solo pueden iniciar una transacción después de determinar que la operación no se realiza en Transaction.

  • Se espera que los métodos de invalidación sigan la asignación de simultaneidad optimista aplicable. Se espera que el método de invalidación inicie ChangeConflictException cuando se produzca un conflicto de simultaneidad optimista. LINQ to SQL detecta esta excepción para que pueda procesar correctamente la SubmitChanges opción proporcionada en SubmitChanges.

  • Se espera que los métodos de creación (Insert) y sobrescritura (Update) devuelvan los valores de las columnas generadas por la base de datos a los miembros de objeto correspondientes cuando la operación se complete correctamente.

    Por ejemplo, si Order.OrderID se asigna a una columna de identidad (clave principal autoincrement), el método de invalidación InsertOrder() debe recuperar el identificador generado por la base de datos y establecer el miembro Order.OrderID en ese identificador. Del mismo modo, los atributos de marca de tiempo deben actualizarse a los valores proporcionados por la base de datos para asegurarse de que los objetos actualizados son coherentes. Si no se propagan los valores generados por la base de datos, se puede producir una incoherencia entre la base de datos y los objetos de los que realiza el seguimiento .DataContext

  • Es responsabilidad del usuario invocar la API dinámica correcta. Por ejemplo, en el método de invalidación de actualización, solo se puede llamar al método ExecuteDynamicUpdate. LINQ to SQL no detecta ni comprueba si el método dinámico invocado coincide con la operación aplicable. Si se llama a un método inapplicable (por ejemplo, ExecuteDynamicDelete para que se actualice un objeto), los resultados no están definidos.

  • Finalmente, se espera que el método de invalidación realice la operación indicada. Las semántica de las operaciones de LINQ to SQL, como la carga diligente, la carga aplazada y SubmitChanges requieren que los métodos de invalidación proporcionen el servicio indicado. Por ejemplo, una invalidación de carga que solo devuelva una colección vacía sin comprobar el contenido en la base de datos probablemente generará datos incoherentes.

Consulte también