Я пытаюсь создать запрос для структуры сущностей, который позволит мне взять список идентификаторов и обновить связанное с ними поле.
Пример в SQL:
UPDATE Friends
SET msgSentBy = '1234'
WHERE id IN (1, 2, 3, 4)
Как мне преобразовать вышеперечисленное в структуру сущностей?
c#
sql
asp.net-mvc
entity-framework
sql-update
Алленкодированный
источник
источник
Friend
s из базы данных, обновить их свойстваmsgSentBy
и сохранить изменения. Но EF будет запускатьUPDATE
операторы для каждой отдельной записи. Это совсем не то же самое, что массовое обновление с одним оператором. Как уже говорилось, ищите стороннюю библиотеку, которая предлагает массовое обновление.Ответы:
что-то вроде ниже
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(); }
ОБНОВИТЬ:
вы можете обновить несколько полей, как показано ниже
friends.ForEach(a => { a.property1 = value1; a.property2 = value2; });
источник
ForEach
- это методList
, и его обычно не рекомендуется использовать, потому что это не очень функциональный способ программирования. Просто используйтеforeach
(оператор) как нормальный человек.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"; }
Вы можете использовать foreach для обновления каждого элемента, соответствующего вашему условию.
Вот пример в более общем виде:
var itemsToUpdate = await Context.friends.Where(f => f.Id == <someCondition>).ToListAsync(); foreach(var item in itemsToUpdate) { item.property = updatedValue; } Context.SaveChanges()
В общем, вы, скорее всего, будете использовать асинхронные методы с ожиданием для запросов к базе данных.
источник