2009-03-18 14 views
7

¿Cuál es la mejor manera de verificar problemas de concurrencia al usar LINQ to SQL en una aplicación ASP.net.Concurrencia con Linq To Sql y ASP.NET

En mi aplicación, estoy recuperando un registro de la base de datos y mostrando los campos en cuadros de texto editables. Entonces el contexto de datos se descarta.

¿Cómo debo guardar el objeto de entidad para que pueda usar las características de concurrencia integradas de L2Sql? No puedo guardar el objeto en sesión y volver a conectarlo a un nuevo contexto de datos: l2s se queja de que el objeto no es nuevo.

El LinqDataSource se las arregla para hacer esto de alguna manera. ¿Alguien sabe cómo?

Respuesta

2

La forma en que la concurrencia optimista en Linq2Sql funciona es que almacena los valores originales y los compara en el inserto.

Si elimina el contexto de datos, perderá los valores originales.

Lo que suelo hacer es cargar el objeto de la base de datos una vez más cuando estoy a punto de guardarlo, y luego modificar ese objeto con los valores del formulario.

+2

Sí, pero si hago eso (que era antes) los cambios de cualquier otro usuario se cargarán y Linq a sql no arrojará un error de concurrencia. –

+0

¿Ha intentado con mirar la Tabla . Método de unión (entidad de TEntity, original de TEntity)? – AndreasN

+0

¿Qué diferencia hay entre obtener el objeto de la base de datos y realizar los cambios y hacer SubmitChanges()? –

0

Linq A SQL de forma predeterminada es compatible con optimistic concurrency control.

Puede cambiar la propiedad UpdateCheck de cada campo de la tabla:

In the LINQ to SQL object model, an optimistic concurrency conflict occurs when both of the following conditions are true:

  • The client tries to submit changes to the database.
  • One or more update-check values have been updated in the database since the client last read them.
+0

Su problema es que pierden el DataContext en la devolución de datos, y no puede adjuntar el objeto original un nuevo DC. – Lucas