Para atualizar uma coluna, aqui estão algumas opções de sintaxe:
Opção 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();
}
opção 2
using (var db=new SomeDatabaseContext())
{
db.SomeTable
.Where(x=>ls.Contains(x.friendid))
.ToList()
.ForEach(a=>a.status=true);
db.SubmitChanges();
}
Opção 3
using (var db=new SomeDatabaseContext())
{
foreach (var some in db.SomeTable.Where(x=>ls.Contains(x.friendid)).ToList())
{
some.status=true;
}
db.SubmitChanges();
}
Atualizar
Conforme solicitado no comentário, pode fazer sentido mostrar como atualizar várias colunas. Portanto, digamos, para o propósito deste exercício, que não desejamos apenas atualizar as status
unidades. Queremos atualizar name
e status
onde o friendid
está combinando. Aqui estão algumas opções de sintaxe para isso:
Opção 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();
}
opção 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();
}
Opção 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();
}
Atualização 2
Na resposta, eu estava usando LINQ to SQL e, nesse caso, para comprometer o banco de dados, o uso é:
db.SubmitChanges();
Mas para o Entity Framework comprometer as mudanças, é:
db.SaveChanges()
records.ForEach(x=> { x.Deleted = true; x.DeletedByUserID = deletedByUserId; x.DeletedOn = DateTime.Now; });
db.SaveChanges()
e nãodb.SubmitChanges()
?ToList()
? É um assassinoNão use o
ToList()
método como na resposta aceita!Executando o SQL Profiler, verifiquei e descobri que a
ToList()
função obtém todos os registros do banco de dados. É um desempenho muito ruim !!Eu teria executado essa consulta pelo comando sql puro da seguinte maneira:
Isso operaria a atualização de uma vez, sem selecionar nem mesmo uma linha.
fonte
Isso é o que eu fiz:
EF:
A esperança ajuda alguém.
fonte
feature
e também não deve adicionarcontext.SaveChanges()
dentroforeach
dele, deve estar fora do loop foreach.