Pregunta

Estoy intentando implementar la solución dada en Manejo de la concurrencia con Entity Framework en una aplicación ASP.NET MVC .

El artículo dice:

Agregar una propiedad de seguimiento a la entidad departamental

En Models\Department.cs, agregue una propiedad de seguimiento:

[Timestamp] 
public Byte[] Timestamp { get; set; }

El atributo Marca de tiempo especifica que esta columna se incluirá en la cláusula Where de los comandos Actualizar y Eliminar enviados a la base de datos.

Ya que estoy usando un modelo primero enfoque, seguí los pasos 1 a 5 descritos en Crear una columna de marca de tiempo con Entity Framework

  1. Agregue una propiedad llamada "Marca de tiempo" a la entidad en el modelo de EF
  2. Establecer el tipo en binario
  3. Establecer anulable en falso
  4. Establecer StoreGeneratedPattern en Calculado
  5. Establecer el modo de concurrencia en fijo

Cuando actualizo mi código desde el modelo de base de datos, Models\Department.cs ahora contiene

    public virtual byte[] Timestamp
    {
        get;
        set;
    }

Luego utilicé la clase de metadatos para especificar el atributo Timestamp:

// Metadata for Department entity
public class DepartmentMetadata
{
    [Timestamp]
    public byte Timestamp { get; set; }
}

P1. Probé si el valor de la Timestamp La columna cambia en caso de ediciones de fila.No lo es.

EDITAR 1 El problema se debió a que el tipo de columna de SQL Server era binary, donde debería haber estado de tipo timestamp.Cambiar el tipo de datos solucionó el problema de que la columna Marca de tiempo no se actualizaba.

P2. Estaba intentando modificar la misma entidad (usando "Abrir en una pestaña nueva") para ver si OptimisticConcurrencyException es aventado.No lo es.¿Qué estoy haciendo mal?Por favor ayúdame a entender, gracias.

Screenshot of my <code>Timestamp</code> property

¿Fue útil?

Solución

El problema se debió a que tenía un ObjectContext por sesión HTTP, por lo que abrir una nueva pestaña y probarlo sería NO provocar una excepción de concurrencia.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top