ID 목록을 가져와 관련 필드를 업데이트 할 수있는 엔터티 프레임 워크에 대한 쿼리를 만들려고합니다.
SQL의 예 :
UPDATE Friends
SET msgSentBy = '1234'
WHERE id IN (1, 2, 3, 4)
위의 내용을 엔티티 프레임 워크로 어떻게 변환합니까?
ID 목록을 가져와 관련 필드를 업데이트 할 수있는 엔터티 프레임 워크에 대한 쿼리를 만들려고합니다.
SQL의 예 :
UPDATE Friends
SET msgSentBy = '1234'
WHERE id IN (1, 2, 3, 4)
위의 내용을 엔티티 프레임 워크로 어떻게 변환합니까?
Friend
데이터베이스에서 일치하는 모든을 가져 와서 속성을 업데이트하고 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()
일반적으로 await for db 쿼리와 함께 비동기 메서드를 가장 많이 사용합니다.