Saya mencoba membuat kueri untuk kerangka entitas yang akan memungkinkan saya untuk mengambil daftar id dan memperbarui bidang yang terkait dengannya.
Contoh di SQL:
UPDATE Friends
SET msgSentBy = '1234'
WHERE id IN (1, 2, 3, 4)
Bagaimana cara mengubah kerangka kerja di atas menjadi entitas?
c#
sql
asp.net-mvc
entity-framework
sql-update
allencoded
sumber
sumber
Friend
dari database dan memperbarui propertinyamsgSentBy
dan menyimpan perubahan. Tetapi EF akanUPDATE
mengeluarkan pernyataan untuk setiap catatan individu. Itu sama sekali tidak sama dengan pembaruan massal satu pernyataan. Seperti yang dikatakan, cari pustaka pihak ketiga yang menawarkan pembaruan massal.Jawaban:
sesuatu seperti di bawah ini
var idList=new int[]{1, 2, 3, 4}; using (var db=new SomeDatabaseContext()) { var friends= db.Friends.Where(f=>idList.Contains(f.ID)).ToList(); friends.ForEach(a=>a.msgSentBy='1234'); db.SaveChanges(); }
MEMPERBARUI:
Anda dapat memperbarui beberapa bidang seperti di bawah ini
friends.ForEach(a => { a.property1 = value1; a.property2 = value2; });
sumber
ForEach
adalah metode aktifList
, dan umumnya tidak disarankan untuk digunakan karena ini bukan cara pemrograman yang sangat fungsional. Gunakan sajaforeach
(operator) seperti orang normal.UPDATE SomeTable SET SomeField = SomeValue WHERE Id IN (...)
)var idList=new int[]{1, 2, 3, 4}; var friendsToUpdate = await Context.Friends.Where(f => idList.Contains(f.Id).ToListAsync(); foreach(var item in previousEReceipts) { item.msgSentBy = "1234"; }
Anda dapat menggunakan foreach untuk memperbarui setiap elemen yang memenuhi kondisi Anda.
Berikut ini contoh dengan cara yang lebih umum:
var itemsToUpdate = await Context.friends.Where(f => f.Id == <someCondition>).ToListAsync(); foreach(var item in itemsToUpdate) { item.property = updatedValue; } Context.SaveChanges()
Secara umum, Anda kemungkinan besar akan menggunakan metode async dengan await untuk kueri db.
sumber