기존의 연결이 끊어진 엔터티를 업데이트하는 방법

entity-framework-core

문제

EntityFrameworkCore에서 작동하는이 코드가 있습니다.

public void SaveProject(Project item)
    {
        var existing = _context.Projects.FirstOrDefault(a => a.Id == item.Id);
        existing.Description = item.Description;
        existing.IsArchived = item.IsArchived;
        existing.IsDeleted = item.IsDeleted;
        existing.Name = item.Name;
        _context.SaveChanges();

    }

연결이 끊어진 엔터티를 가져 와서 데이터베이스에서 찾은 다음 변경 사항을 적용합니다.

이 작업을 수행하는 더 좋은 방법이 있습니까?

데이터베이스에 전화하지 않으려합니다. 즉, 수정 된 것으로 엔터티를 표시하고 SaveChanges ()를 호출 할 수 있기를 원합니다.

그렇게 할 수있는 방법이 있습니까?

수락 된 답변

해당 항목이 데이터베이스에 있는지 확실하면 DbContext의 Attach 메서드를 사용할 수 있습니다.

public void SaveProject(Project item)
{
    _context.Projects.Attach(item);
    _context.Entity(item).State=EntityState.Modified;
    _context.SaveChanges();
}

인기 답변

EntityFramework Core에서는 이제 Update 메서드를 사용하여 수행 할 수 있습니다.

 DbContext.Update<Item>(item);
 this.SaveChanges();

버전 2.1에서는 Id 속성이 자동 생성되면 Update 메서드를 새 엔터티와 기존 엔터티 모두에 사용할 수 있습니다.

문서 도구

단점은 모든 속성이 동일하더라도 수정 된 것으로 표시된다는 입니다. 이 문제는 데이터베이스 트리거에서 변경 사항을 로깅하는 경우 모든 속성이 변경되지 않은 경우에도 변경된 것으로 플래그 지정된다는 점에 있습니다. 특정 등록 정보 만 업데이트하려면 데이터베이스에서 엔티티를 가져 와서 원하는대로 업데이트 한 다음 저장해야합니다.



Related

아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.