Para actualizar una columna, aquí hay algunas opciones de sintaxis:
Opción 1
var ls=new int[]{2,3,4};
using (var db=new SomeDatabaseContext())
{
var some= db.SomeTable.Where(x=>ls.Contains(x.friendid)).ToList();
some.ForEach(a=>a.status=true);
db.SubmitChanges();
}
opcion 2
using (var db=new SomeDatabaseContext())
{
db.SomeTable
.Where(x=>ls.Contains(x.friendid))
.ToList()
.ForEach(a=>a.status=true);
db.SubmitChanges();
}
Opción 3
using (var db=new SomeDatabaseContext())
{
foreach (var some in db.SomeTable.Where(x=>ls.Contains(x.friendid)).ToList())
{
some.status=true;
}
db.SubmitChanges();
}
Actualizar
Como se solicita en el comentario, podría tener sentido mostrar cómo actualizar varias columnas. Entonces, digamos, a los efectos de este ejercicio, que no solo queremos actualizar las status
en. Queremos actualizar name
y status
dónde friendid
coincide. Aquí hay algunas opciones de sintaxis para eso:
Opción 1
var ls=new int[]{2,3,4};
var name="Foo";
using (var db=new SomeDatabaseContext())
{
var some= db.SomeTable.Where(x=>ls.Contains(x.friendid)).ToList();
some.ForEach(a=>
{
a.status=true;
a.name=name;
}
);
db.SubmitChanges();
}
opcion 2
using (var db=new SomeDatabaseContext())
{
db.SomeTable
.Where(x=>ls.Contains(x.friendid))
.ToList()
.ForEach(a=>
{
a.status=true;
a.name=name;
}
);
db.SubmitChanges();
}
Opción 3
using (var db=new SomeDatabaseContext())
{
foreach (var some in db.SomeTable.Where(x=>ls.Contains(x.friendid)).ToList())
{
some.status=true;
some.name=name;
}
db.SubmitChanges();
}
Actualización 2
En la respuesta, estaba usando LINQ to SQL y, en ese caso, para comprometerme con la base de datos, el uso es:
db.SubmitChanges();
Pero para que Entity Framework confirme los cambios es:
db.SaveChanges()
records.ForEach(x=> { x.Deleted = true; x.DeletedByUserID = deletedByUserId; x.DeletedOn = DateTime.Now; });
db.SaveChanges()
y nodb.SubmitChanges()
?ToList()
? Es un asesino¡No use el
ToList()
método como en la respuesta aceptada!Al ejecutar SQL Profiler, verifiqué y encontré que la
ToList()
función obtiene todos los registros de la base de datos. ¡Es una actuación realmente mala!Habría ejecutado esta consulta mediante el comando sql puro de la siguiente manera:
Esto operaría la actualización de una sola vez sin seleccionar ni una fila.
fuente
Esto es lo que hice:
EF:
La esperanza ayuda a alguien.
fuente
feature
y tampoco debe agregarlocontext.SaveChanges()
dentroforeach
, debe estar fuera de cada bucle.