차이가 무엇을 합니까?추적()이 수행하지 않는 대로?
저는 그것과 관련하여 질문이 있습니다..AsNoTracking()확장, 이것은 모두 꽤 새롭고 꽤 혼란스럽기 때문입니다.
웹 사이트에 대해 요청별 컨텍스트를 사용하고 있습니다.
대부분의 엔티티는 변경되지 않으므로 추적할 필요가 없지만 다음과 같은 시나리오가 있습니다. 데이터베이스에 무엇이 적용되는지 또는 이 경우에도 차이가 있는지 확신할 수 없습니다.
이 예는 현재 제가 수행하고 있는 작업입니다.
context.Set<User>().AsNoTracking()
// Step 1) Get user
context.Set<User>()
// Step 2) Update user
이는 위와 동일하지만 분리합니다..AsNoTracking()1단계부터:
context.Set<User>();
// Step 1) Get user
context.Set<User>()
// Step 2) Update user
1단계와 2단계는 동일한 컨텍스트를 사용하지만 다른 시간에 발생합니다.제가 이해할 수 없는 것은 차이가 있느냐 하는 것입니다.2단계는 업데이트이기 때문에 어쨌든 둘 다 데이터베이스에 두 번 충돌할 것으로 생각합니다.
다른 점이 무엇인지 말해줄 수 있는 사람?
차이점은 첫 번째 경우 검색된 사용자가 컨텍스트에 의해 추적되지 않으므로 사용자를 데이터베이스에 다시 저장할 때 사용자를 첨부하고 사용자의 상태를 올바르게 설정하여 EF가 새 사용자를 삽입하는 대신 기존 사용자를 업데이트해야 한다는 것을 알아야 한다는 것입니다.두 번째 경우에는 추적 메커니즘이 이를 대신 처리하므로 동일한 컨텍스트 인스턴스를 사용하여 사용자를 로드하고 저장하는 경우에는 이 작업을 수행할 필요가 없습니다.
이 페이지를 참조하십시오. Entity Framework 및
추적 기능이 없는 기능
Entity Framework는 애플리케이션의 성능을 최적화하는 데 도움이 되는 다양한 성능 조정 옵션을 제공합니다.이러한 조정 옵션 중 하나는 다음과 같습니다..AsNoTracking()이 최적화를 통해 다음과 같은 이점을 얻을 수 있습니다.Entity Framework쿼리 결과를 추적하지 않습니다.즉,Entity Framework쿼리에 의해 반환되는 엔티티에 대한 추가 처리 또는 저장을 수행하지 않습니다.그러나 추적 그래프에 다시 첨부하지 않고는 이러한 엔티티를 업데이트할 수 없습니다.
AsNoTracking을 사용하면 상당한 성능 향상 효과를 얻을 수 있습니다.
엔티티 쿼리에 대한 추적 LINQ 없음
쿼리가 읽기 작업에 사용되는 경우 AsNoTracking()을 사용하는 것이 좋습니다.이러한 시나리오에서는 엔티티를 반환하지만 컨텍스트에 의해 추적되지는 않습니다.따라서 최소한의 메모리 사용과 최적의 성능을 보장합니다.
장점
- 일반 LINQ 쿼리보다 성능이 향상되었습니다.
- 완전히 구체화된 개체입니다.
- 프로그래밍 언어에 내장된 구문으로 쓰기가 가장 간단합니다.
단점
- CUD 작업에 적합하지 않습니다.
- 다음과 같은 특정 기술 제한 사항: OUTER JOIN 쿼리에 DefaultIfEmpty를 사용하는 패턴은 Entity SQL의 단순한 OUTER JOIN 문보다 더 복잡한 쿼리를 발생시킵니다.
- 당신은 여전히 일반적인 패턴 매칭과 함께 LIKE를 사용할 수 없습니다.
자세한 내용은 여기에서 확인할 수 있습니다.
추적을 비활성화하면 결과 집합이 메모리로 스트리밍됩니다.이는 대용량 데이터 세트를 사용하는 경우 전체 데이터 세트가 동시에 필요하지 않을 때 더욱 효율적입니다.
참조:
No Tracking()을 사용하면 EF의 "레코드당 고유 키" 요구 사항을 무시할 수 있습니다(다른 답변에서는 명시적으로 언급하지 않음).
일부 필드가 null이거나 뷰의 특성이 논리적으로 색인화되지 않기 때문에 고유 키를 지원하지 않는 보기를 읽을 때 매우 유용합니다.
이러한 경우 "key"를 null이 아닌 열로 설정할 수 있지만 AsNoTracking()을 모든 쿼리에 사용해야 합니다. 그렇지 않으면 레코드(키별 복제)를 건너뜁니다.
경우(프로세스를 ) 변경사항을 해야 할 DB를 하십시오.AsNoTracking()그렇지 않으면 EF가 컨텍스트가 가진 마지막 복사본을 대신 제공할 수 있으므로 쿼리할 때마다 일반적으로 새 컨텍스트를 사용하는 것이 좋습니다.
http://codethug.com/2016/02/19/Entity-Framework-Cache-Busting/
언급URL : https://stackoverflow.com/questions/12211680/what-difference-does-asnotracking-make
'programing' 카테고리의 다른 글
| MongoDB 노드 드라이버가 인스턴스 풀을 생성하는 동안 오류가 발생하는 이유는 무엇입니까? (0) | 2023.06.03 |
|---|---|
| CSS 클래스가 하나 이상의 다른 클래스를 상속할 수 있습니까? (0) | 2023.06.03 |
| Xcode 6 스토리보드 사이즈가 잘못되었습니까? (0) | 2023.06.03 |
| 파일 대화상자를 열고 WPF 컨트롤 및 C#을 사용하여 파일을 선택합니다. (0) | 2023.06.03 |
| Express.js란 무엇입니까? (0) | 2023.06.03 |