Digamos que tengo una tabla que rastrea el número de veces que se descargó un archivo, y expongo esa tabla a mi código a través de EF. Cuando el archivo se descargue, quiero actualizar el recuento por uno. En un primer momento, escribí algo como esto:Cómo incrementar de forma segura un contador en Entity Framework
var fileRecord = (from r in context.Files where r.FileId == 3 select r).Single();
fileRecord.Count++;
context.SaveChanges();
Pero luego, cuando examiné el SQL real que se genera en estas declaraciones me di cuenta de que la incrementación no está sucediendo en el lado DB pero en cambio en mi memoria. Entonces mi programa lee el valor del contador en la base de datos (digamos 2003), realiza el cálculo (el nuevo valor es 2004) y luego actualiza explícitamente la fila con el nuevo valor de Conteo de 2004. Claramente esto no es seguro desde una perspectiva de concurrencia .
que estaba esperando la consulta podría terminar buscando su lugar como:
UPDATE Files SET Count = Count + 1 WHERE FileId=3
¿Puede alguien sugerir cómo podría lograr esto? Preferiría no bloquear la fila antes de la lectura y luego desbloquearla después de la actualización porque tengo miedo de bloquear las lecturas de otros usuarios (a menos que haya alguna forma de bloquear una fila solo para escrituras pero no bloquee las lecturas).
También miré haciendo un comando Entity SQL pero parece que Entity SQL no admite actualizaciones.
Gracias