with update net mvc insertar framework eliminar desde datos con asp actualizar c# linq-to-sql timestamp disconnected

net - update linq sql c#



LINQ to SQL desconectado objeto de actualizaciĆ³n desde el contexto de datos diferentes (2)

Como dice que creó el campo de marca de tiempo en la tabla, me pregunto si, en el caso en que esta columna se agregó más tarde, las propiedades de la columna pueden no estar configuradas correctamente. Es posible que desee comprobar las propiedades en su columna TimeStamp en el diseñador de DBML. Asegúrate de eso:

AutoGenerated = true Auto-Sync = Always Time Stamp = True Update Check = Never

El tipo de datos del servidor debe ser rowversion NOT NULL

Si no está configurado para generarse automáticamente y sincronizarse siempre, la versión de la fila no se devolverá desde la inserción, ya que no la ha cambiado cuando se completó la inserción. A pesar de que este valor es generado por la base de datos, DataContext necesita saber esto para poder manejarlo correctamente.

Además, ahora que tiene una columna de marca de tiempo, UpdateCheck debe establecerse en Never para todas las demás columnas.

http://geekswithblogs.net/michelotti/archive/2007/12/17/117791.aspx

Estoy usando ASP.NET con C # e intento usar linq en sql para actualizar un contexto de datos tal como se exhibe en el blog vinculado anteriormente. Creé el campo de marca de tiempo en la tabla tal como se indica y estoy usando el siguiente método:

private void updateRecord(TableName updatedRecord) { context db = new context(); db.TableName.Attach(updatedRecord,true); db.SubmitChanges(); }

Mi pregunta es, ¿se supone que debes asignar el campo timeStamp a cualquier cosa en tu Record actualizado antes de intentar llamar al método Attach en tu contexto de datos?

Cuando ejecuto este código recibo la siguiente excepción: System.Data.Linq.ChangeConflictException: Row not found or changed. Actualizo todos los campos, incluida la clave principal del registro que estoy actualizando antes de pasar el objeto a este método de actualización. Durante la depuración, el atributo TimeStamp del objeto se muestra como nulo. No estoy seguro si se supone que es así o no.

Cada libro y recurso que tengo dice que esta es la manera de hacerlo, pero ninguno de ellos entra en gran detalle sobre este atributo TimeStamp.

Sé que esto es rápido y fácil, así que si alguien sabe, házmelo saber.


Si tiene una columna de marca de tiempo, entonces para actualizar un registro (desde un objeto de vanilla): sí, esperaría tener que asignarlo. De lo contrario, perderá la capacidad de utilizar la marca de tiempo para la comprobación de concurrencia optimista.

La idea es que tomes una copia de la marca de tiempo cuando agarres tu objeto (desconectado), luego cuando actualices puedes usar esta columna para verificar que nadie más haya editado la fila.

Hay dos escenarios comunes:

1: si solo está realizando una operación de corta vida, primero saque el registro de la base de datos: realice los cambios en el objeto, y simplemente SumbitChanges () [todos con el mismo contexto de datos]. El contexto de datos manejará la concurrencia para usted.

2: si está desconectando el objeto (por ejemplo, pasándolo a una aplicación cliente por un tiempo), entonces use algo como serialización (los objetos LINQ-to-SQL son compatibles con DataContractSerializer (opcionalmente, debe habilitarlo)). Por lo tanto, serialice el objeto en el servidor, páselo al cliente; el cliente realiza cambios en su copia y la devuelve. El servidor lo deserializa y usa Adjuntar () y EnviarCambios (). El registro en la memoria aún debe tener la marca de tiempo que tenía cuando se extrajo de la base de datos, por lo que podemos realizar una concurrencia optimista que abarca todo el tiempo que se ha desconectado el registro.