2008-10-15 12 views
21

¿Hay alguna razón por la que algo así no funcione?LINQ no actualizando en .SubmitChanges()

Esta es la lógica que han utilizado muchas veces para actualizar un registro en una tabla con LINQ:

DataClasses1DataContext db = new DataClasses1DataContext(); 
User updateUser = db.Users.Single(e => e.user == user); 
updateUser.InUse = !updateUser.InUse; 
db.Log = new System.IO.StreamWriter(@"c:\temp\linq.log") { AutoFlush = true }; 
db.SubmitChanges(); 

(updateUser.InUse es un campo de bits)

Por alguna razón, no es trabajando. Cuando reviso linq.log, está completamente en blanco.

¿Podría haber un problema con mi .dbml? Otras tablas parecen funcionar bien, pero he comparado propiedades en el archivo .dbml y todas coinciden.

Es como si el db.SubmitChanges(); no detecta ninguna actualización requerida.

+1

disfrute de su Taxonomista en 'submitchanges': P – DJTripleThreat

Respuesta

66

La tabla no se pudo actualizar correctamente porque no tenía una clave principal. (En realidad tenía la columna, pero la restricción no se copió cuando hice un SELECT INTO mi tabla de desarrollo). La clase DataContext requiere una clave principal para las actualizaciones.

+1

Esto también resolvió mi problema, ¡gracias! – Tuoski

+1

Y el mío. Todavía cometo este error todos estos años después. Tan fácil de pasar por alto, esp. cuando solo una mesa tiene el problema ¿Por qué skeet todavía está en la cima? Demasiada rep? –

2

¿La propiedad InUse es "normal" en lo que se refiere a LINQ? (por ejemplo, no está autogenerado o algo así de funky)

Alternativamente, no creo que sea un Nullable < bool> ¿es esto, con un valor actual de nulo? Si es así, su línea de actualización no está haciendo realmente nada - para booleanos que aceptan valores nulos,! Null = null.

+0

updateUser.InUse =! UpdateUser.InUse; no es el problema. no es nulable y he intentado hardcoding tanto falso como verdadero. no se genera automáticamente. – ctrlShiftBryan

+0

Si cambia cualquier otro campo, ¿se actualiza? –

Cuestiones relacionadas