Próbuję utworzyć kwerendę dotyczącą struktury jednostki, która pozwoli mi pobrać listę identyfikatorów i zaktualizować skojarzone z nimi pole.
Przykład w SQL:
UPDATE Friends
SET msgSentBy = '1234'
WHERE id IN (1, 2, 3, 4)
Jak przekonwertować powyższe na strukturę encji?
c#
sql
asp.net-mvc
entity-framework
Allencoded
źródło
źródło
Friend
pliki z bazy danych, zaktualizować ich właściwościmsgSentBy
i zapisać zmiany. Ale EF będzie uruchamiaćUPDATE
instrukcje dla każdego pojedynczego rekordu. To nie to samo, co zbiorcza aktualizacja z jednym oświadczeniem. Jak już powiedziano, poszukaj biblioteki innej firmy, która oferuje zbiorczą aktualizację.Odpowiedzi:
coś jak poniżej
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(); }
AKTUALIZACJA:
możesz zaktualizować wiele pól, jak poniżej
friends.ForEach(a => { a.property1 = value1; a.property2 = value2; });
źródło
ForEach
jest metodą włączonąList
i generalnie odradza się jej używanie, ponieważ nie jest to bardzo funkcjonalny sposób programowania. Po prostu używajforeach
(operatora) jak normalnej osoby.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"; }
Możesz użyć foreach, aby zaktualizować każdy element, który spełnia twój warunek.
Oto przykład w bardziej ogólny sposób:
var itemsToUpdate = await Context.friends.Where(f => f.Id == <someCondition>).ToListAsync(); foreach(var item in itemsToUpdate) { item.property = updatedValue; } Context.SaveChanges()
Ogólnie rzecz biorąc, najprawdopodobniej będziesz używać metod asynchronicznych z await dla zapytań db.
źródło