Pour mettre à jour une colonne, voici quelques options de syntaxe:
Option 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();
}
Option 2
using (var db=new SomeDatabaseContext())
{
db.SomeTable
.Where(x=>ls.Contains(x.friendid))
.ToList()
.ForEach(a=>a.status=true);
db.SubmitChanges();
}
Option 3
using (var db=new SomeDatabaseContext())
{
foreach (var some in db.SomeTable.Where(x=>ls.Contains(x.friendid)).ToList())
{
some.status=true;
}
db.SubmitChanges();
}
Mettre à jour
Comme demandé dans le commentaire, il peut être judicieux de montrer comment mettre à jour plusieurs colonnes. Donc, disons aux fins de cet exercice que nous ne voulons pas seulement mettre à jour les status
at. Nous voulons mettre à jour name
et status
où le friendid
correspond. Voici quelques options de syntaxe pour cela:
Option 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();
}
Option 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();
}
Option 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();
}
Mise à jour 2
Dans la réponse, j'utilisais LINQ to SQL et dans ce cas, pour m'engager dans la base de données, l'utilisation est:
db.SubmitChanges();
Mais pour Entity Framework pour valider les modifications, c'est:
db.SaveChanges()
records.ForEach(x=> { x.Deleted = true; x.DeletedByUserID = deletedByUserId; x.DeletedOn = DateTime.Now; });
db.SaveChanges()
et nondb.SubmitChanges()
?ToList()
? C'est un tueurN'utilisez pas la
ToList()
méthode comme dans la réponse acceptée!En exécutant le profileur SQL, j'ai vérifié et trouvé que la
ToList()
fonction récupère tous les enregistrements de la base de données. C'est vraiment une mauvaise performance !!J'aurais exécuté cette requête par pure commande sql comme suit:
Cela opérerait la mise à jour en un seul coup sans sélectionner ne serait-ce qu'une seule ligne.
la source
C'est ce que j'ai fait:
EF:
L'espoir aide quelqu'un.
la source
feature
et vous ne devriez pas non plus ajouter à l'context.SaveChanges()
intérieur,foreach
il devrait être à l'extérieur de la boucle foreach.