Untuk memperbarui satu kolom, berikut adalah beberapa opsi sintaks:
Pilihan 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();
}
pilihan 2
using (var db=new SomeDatabaseContext())
{
db.SomeTable
.Where(x=>ls.Contains(x.friendid))
.ToList()
.ForEach(a=>a.status=true);
db.SubmitChanges();
}
Pilihan 3
using (var db=new SomeDatabaseContext())
{
foreach (var some in db.SomeTable.Where(x=>ls.Contains(x.friendid)).ToList())
{
some.status=true;
}
db.SubmitChanges();
}
Memperbarui
Seperti yang diminta dalam komentar, mungkin masuk akal untuk menunjukkan cara memperbarui beberapa kolom. Jadi katakanlah untuk tujuan latihan ini bahwa kita ingin tidak hanya memperbarui status
at ones. Kami ingin memperbarui name
dan status
mana yang friendid
cocok. Berikut beberapa opsi sintaks untuk itu:
Pilihan 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();
}
pilihan 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();
}
Pilihan 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();
}
Perbarui 2
Dalam jawaban saya menggunakan LINQ ke SQL dan dalam hal ini untuk berkomitmen ke database, penggunaannya adalah:
db.SubmitChanges();
Tetapi untuk Entity Framework untuk melakukan perubahan itu adalah:
db.SaveChanges()
records.ForEach(x=> { x.Deleted = true; x.DeletedByUserID = deletedByUserId; x.DeletedOn = DateTime.Now; });
db.SaveChanges()
dan tidakdb.SubmitChanges()
?ToList()
? Ini pembunuhJangan gunakan
ToList()
metode seperti pada jawaban yang diterima!Menjalankan profiler SQL, saya memverifikasi dan menemukan bahwa
ToList()
fungsi mendapatkan semua catatan dari database. Ini benar-benar kinerja yang buruk !!Saya akan menjalankan kueri ini dengan perintah sql murni sebagai berikut:
string query = "Update YourTable Set ... Where ..."; context.Database.ExecuteSqlCommandAsync(query, new SqlParameter("@ColumnY", value1), new SqlParameter("@ColumnZ", value2));
Ini akan mengoperasikan pembaruan dalam satu tembakan tanpa memilih satu baris pun.
sumber
Inilah yang saya lakukan:
EF:
using (var context = new SomeDBContext()) { foreach (var item in model.ShopItems) // ShopItems is a posted list with values { var feature = context.Shop .Where(h => h.ShopID == 123 && h.Type == item.Type).ToList(); feature.ForEach(a => a.SortOrder = item.SortOrder); } context.SaveChanges(); }
Harapan membantu seseorang.
sumber
feature
dan juga Anda tidak boleh menambahkancontext.SaveChanges()
diforeach
dalamnya harus berada di luar foreach loop.