Responsabilidades del desarrollador al invalidar un comportamiento predeterminado

LINQ to SQL no exige que se cumplan los requisitos siguientes, pero, en caso de no cumplirse, el comportamiento no está definido.

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

  • No se pueden utilizar métodos de invalidación para iniciar, confirmar o 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 se pueda procesar correctamente la opción SubmitChanges proporcionada en SubmitChanges.

  • Se espera que los métodos de invalidación de creación (Insert) y de actualización (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.

    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. De igual forma, los miembros de marca de tiempo deben estar actualizados con los valores de marca de tiempo generados por la base de datos para garantizar que los objetos actualizados sean coherentes. Si no se propagan los valores generados por la base de datos, puede haber incoherencias entre la base de datos y los objetos de los que DataContext realiza un seguimiento.

  • Es el usuario quien debe 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. Los resultados no están definidos si se llama a un método no aplicable (por ejemplo, ExecuteDynamicDelete para un objeto que se va a actualizar).

  • 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