ChangeTracker 클래스

정의

컨텍스트가 추적하는 엔터티 인스턴스에 대한 변경 내용 추적 정보 및 작업에 대한 액세스를 제공합니다. 이 클래스의 인스턴스는 일반적으로 가져오 ChangeTracker 며 애플리케이션 코드에서 직접 생성되도록 설계되지 않았습니다.

public class ChangeTracker : Microsoft.EntityFrameworkCore.Infrastructure.IInfrastructure<Microsoft.EntityFrameworkCore.ChangeTracking.Internal.IStateManager>
public class ChangeTracker : Microsoft.EntityFrameworkCore.Infrastructure.IInfrastructure<Microsoft.EntityFrameworkCore.ChangeTracking.Internal.IStateManager>, Microsoft.EntityFrameworkCore.Infrastructure.IResettableService
public class ChangeTracker : Microsoft.EntityFrameworkCore.Infrastructure.IResettableService
type ChangeTracker = class
    interface IInfrastructure<IStateManager>
type ChangeTracker = class
    interface IInfrastructure<IStateManager>
    interface IResettableService
type ChangeTracker = class
    interface IResettableService
Public Class ChangeTracker
Implements IInfrastructure(Of IStateManager)
Public Class ChangeTracker
Implements IInfrastructure(Of IStateManager), IResettableService
Public Class ChangeTracker
Implements IResettableService
상속
ChangeTracker
구현
IInfrastructure<Microsoft.EntityFrameworkCore.ChangeTracking.Internal.IStateManager> IResettableService

설명

자세한 내용은 EF Core 변경 내용 추적 을 참조하세요.

생성자

ChangeTracker(DbContext)

이 API는 Entity Framework Core 인프라를 지원하며 코드에서 직접 사용할 수 없습니다. 이 API는 이후 릴리스에서 변경되거나 제거될 수 있습니다.

ChangeTracker(DbContext, IStateManager, IChangeDetector, IModel, IEntityEntryGraphIterator)

이 API는 Entity Framework Core 인프라를 지원하며 공용 API와 동일한 호환성 표준이 적용되지 않는 내부 API입니다. 릴리스에서 예고 없이 변경되거나 제거될 수 있습니다. 코드에서 직접 사용해야 하며 이렇게 하면 새 Entity Framework Core 릴리스로 업데이트할 때 애플리케이션 오류가 발생할 수 있다는 것을 알고 있어야 합니다.

ChangeTracker(IStateManager, IChangeDetector, IEntityEntryGraphIterator, DbContext)

이 API는 Entity Framework Core 인프라를 지원하며 코드에서 직접 사용할 수 없습니다. 이 API는 이후 릴리스에서 변경되거나 제거될 수 있습니다.

속성

AutoDetectChangesEnabled

메서드가 메서드 및 관련 클래스에 의해 DbContext 자동으로 호출되는지 여부를 DetectChanges() 나타내는 값을 가져오거나 설정합니다.

기본값은 true입니다. 이렇게 하면 변경 내용 추적 정보와 같은 SaveChanges() 작업을 수행하거나 반환하기 전에 컨텍스트에서 추적된 엔터티 인스턴스에 대한 변경 내용을 인식할 수 있습니다. 자동 검색 변경을 사용하지 않도록 설정하면 엔터티 인스턴스가 DetectChanges() 수정될 때 호출되는지 확인해야 합니다. 이렇게 하지 않으면 일부 변경 내용이 반환되는 동안 SaveChanges() 또는 오래된 변경 내용 추적 정보가 유지되지 않을 수 있습니다.

CascadeDeleteTiming

부모/주Deleted체 엔터티가 표시되면 종속/자식 엔터티의 상태가 설정된 Deleted 시기를 나타내는 값을 가져오거나 설정합니다. 기본값은Immediate

종속/자식 엔터티는 관계가 .로 구성된 Cascade경우에만 자동으로 삭제됩니다. 이 설정은 기본적으로 필수 관계에 대해 설정됩니다.

Context

이 변경 추적기가 속한 컨텍스트를 가져옵니다.

DebugView

추적 중인 엔터티의 사람이 읽을 수 있는 보기를 위해 디버거에서 이 속성을 확장합니다.

경고: 디버그 문자열의 형식을 사용하지 마세요. 디버깅 전용으로 설계되었으며 릴리스 간에 임의로 변경될 수 있습니다.

DeleteOrphansTiming

탐색 또는 외래 키 속성을 null로 설정하여 종속/자식 엔터티의 상태가 부모/주체 엔터티에서 한 번 분리된 상태로 설정된 Deleted 경우를 나타내는 값을 가져오거나 설정합니다. 기본값은 Immediate입니다.

종속/자식 엔터티는 관계가 .로 구성된 Cascade경우에만 자동으로 삭제됩니다. 이 설정은 기본적으로 필수 관계에 대해 설정됩니다.

LazyLoadingEnabled

추적된 엔터티의 탐색 속성이 첫 번째 액세스에서 로드될지 여부를 나타내는 값을 가져오거나 설정합니다.

기본값은 true입니다. 그러나 지연 로드는 지연 로드를 위해 모델에서도 구성된 엔터티의 탐색 속성에 대해서만 발생합니다.

QueryTrackingBehavior

컨텍스트에 대해 실행되는 LINQ 쿼리에 대한 추적 동작을 가져오거나 설정합니다. 변경 내용 추적을 사용하지 않도록 설정하면 각 엔터티 인스턴스에 대한 변경 내용 추적 설정 오버헤드를 방지하므로 읽기 전용 시나리오에 유용합니다. 엔터티 인스턴스를 조작하고 해당 변경 내용을 데이터베이스 SaveChanges()에 유지하려면 변경 내용 추적을 사용하지 않도록 설정하면 안 됩니다.

이 메서드는 컨텍스트의 기본 동작을 설정하지만, 해당 및 AsTracking<TEntity>(IQueryable<TEntity>) 메서드를 사용하여 개별 쿼리에 대해 이 동작을 재정의할 AsNoTracking<TEntity>(IQueryable<TEntity>) 수 있습니다.

기본값은 TrackAll입니다. 즉, 변경 추적기는 LINQ 쿼리에서 반환되는 모든 엔터티의 변경 내용을 추적합니다.

메서드

AcceptAllChanges()

컨텍스트의 엔터티에 대한 모든 변경 내용을 수락합니다. 추적된 엔터티는 데이터베이스의 현재 상태를 나타낸 것으로 간주됩니다. 이 메서드는 일반적으로 변경 내용을 데이터베이스에 SaveChanges() 성공적으로 저장한 후에 호출됩니다.

CascadeChanges()

자식/종속 엔터티가 필수 부모/주체 엔터티에서 분리되거나 필요한 부모/주체 엔터티 자체가 삭제되면 자식/종속 엔터티를 즉시 즉시 삭제합니다. DeleteBehavior을 참조하세요.

이 메서드는 일반적으로 애플리케이션에 의해 제어 되는 한 번에 삭제를 강제로 설정 Never 된 경우에 CascadeDeleteTimingDeleteOrphansTiming 사용 됩니다.

true 이 경우 AutoDetectChangesEnabled 이 메서드가 호출DetectChanges()됩니다.

Clear()

현재 추적된 모든 엔터티 추적을 중지합니다.

DbContext 는 각 작업 단위에 대해 새 인스턴스가 만들어지는 짧은 수명을 갖도록 설계되었습니다. 이렇게 하면 각 작업 단위가 끝날 때 컨텍스트가 삭제될 때 추적된 모든 엔터티가 삭제됩니다. 그러나 이 메서드를 사용하여 추적된 모든 엔터티를 지우는 것은 새 컨텍스트 인스턴스를 만드는 것이 실용적이지 않은 경우에 유용할 수 있습니다.

이 메서드는 추적된 모든 엔터티를 분리하는 방법보다 항상 선호되어야 합니다. 엔터티 분리는 부작용이 있을 수 있는 느린 프로세스입니다. 이 메서드는 컨텍스트에서 추적된 모든 엔터티를 지우는 데 훨씬 더 효율적입니다.

엔터티가 개별적으로 분리되지 않으므로 이 메서드는 이벤트를 생성 StateChanged 하지 않습니다.

DetectChanges()

추적된 엔터티 인스턴스를 검사하여 인스턴스 데이터에 대한 변경 내용을 검색합니다. DetectChanges() 는 일반적으로 최신 정보가 필요한 경우 컨텍스트에 의해 자동으로 호출됩니다(변경 내용 추적 정보를 반환하기 전 SaveChanges() 과 반환할 때). 일반적으로 사용하지 않도록 설정한 AutoDetectChangesEnabled경우에만 이 메서드를 호출해야 합니다.

Entries()

컨텍스트에서 EntityEntry 추적되는 각 엔터티에 대한 값을 반환합니다. 항목은 각 엔터티에 대한 변경 내용 추적 정보 및 작업에 대한 액세스를 제공합니다.

이 메서드는 반환된 모든 항목이 최신 상태를 반영하도록 호출 DetectChanges() 합니다. DetectChanges가 자동으로 호출되지 않도록 방지하는 데 사용합니다 AutoDetectChangesEnabled .

반환된 열거형을 반복하는 동안 엔터티 상태를 수정하면 열거하는 동안 컬렉션이 수정되었음을 나타낼 수 있습니다 InvalidOperationException . 이를 방지하려면 반복하기 전에 사용 ToList<TSource>(IEnumerable<TSource>) 하거나 유사한 방어 복사본을 만듭니다.

Entries<TEntity>()

컨텍스트에서 EntityEntry 추적되는 지정된 형식의 모든 엔터티를 가져옵니다. 항목은 각 엔터티에 대한 변경 내용 추적 정보 및 작업에 대한 액세스를 제공합니다.

HasChanges()

새 엔터티, 삭제된 엔터티 또는 변경된 엔터티가 추적되고 있는지 확인하여 이러한 변경 내용이 데이터베이스로 전송되거나 호출되는 경우 SaveChanges()SaveChangesAsync(CancellationToken) 해당 엔터티를 전송합니다.

이 메서드는 .로 설정되지 않은 한 AutoDetectChangesEnabled 호출 DetectChanges() 됩니다false.

TrackGraph(Object, Action<EntityEntryGraphNode>)

탐색 속성을 트래버스하여 연결할 수 있는 엔터티 및 엔터티 추적을 시작합니다. 순회는 재귀적이므로 검색된 엔터티의 탐색 속성도 검색됩니다. 지정된 엔터티는 검색된 callback 각 엔터티에 대해 호출되며 각 엔터티를 State 추적하도록 설정해야 합니다. 상태가 설정되지 않은 경우 엔터티는 추적되지 않은 상태로 유지됩니다.

이 메서드는 컨텍스트의 한 인스턴스를 사용하여 엔터티를 검색한 다음 컨텍스트의 다른 인스턴스를 사용하여 변경 내용을 저장하는 연결이 끊긴 시나리오에서 사용하도록 설계되었습니다. 이 예제는 한 서비스 호출이 데이터베이스에서 엔터티를 검색하고 다른 서비스 호출이 엔터티에 대한 변경 내용을 유지하는 웹 서비스입니다. 각 서비스 호출은 호출이 완료될 때 삭제되는 컨텍스트의 새 인스턴스를 사용합니다.

컨텍스트에서 이미 추적된 엔터티가 검색된 경우 해당 엔터티는 처리되지 않으며 탐색 속성은 트래버스되지 않습니다.

TrackGraph<TState>(Object, TState, Func<EntityEntryGraphNode,TState,Boolean>)

엔터티 및 엔터티의 탐색 속성을 트래버스하여 연결할 수 있는 엔터티 추적을 시작합니다. 순회는 재귀적이므로 검색된 엔터티의 탐색 속성도 검색됩니다. 지정된 엔터티는 검색된 callback 각 엔터티에 대해 호출되며 각 엔터티를 State 추적하도록 설정해야 합니다. 상태가 설정되지 않은 경우 엔터티는 추적되지 않은 상태로 유지됩니다.

이 메서드는 컨텍스트의 한 인스턴스를 사용하여 엔터티를 검색한 다음 컨텍스트의 다른 인스턴스를 사용하여 변경 내용을 저장하는 연결이 끊긴 시나리오에서 사용하도록 설계되었습니다. 이 예제는 한 서비스 호출이 데이터베이스에서 엔터티를 검색하고 다른 서비스 호출이 엔터티에 대한 변경 내용을 유지하는 웹 서비스입니다. 각 서비스 호출은 호출이 완료될 때 삭제되는 컨텍스트의 새 인스턴스를 사용합니다.

일반적으로 그래프의 통과는 이미 추적된 엔터티가 발견되거나 추적할 수 없는 엔터티에 도달할 때마다 중지되어야 합니다. 이 일반적인 동작의 경우 오버로드를 TrackGraph(Object, Action<EntityEntryGraphNode>) 사용합니다. 반면에 이 오버로드는 콜백이 통과가 종료되는 시기를 결정할 수 있지만, 통과가 무한 루프로 들어가지 않도록 하기 위해 호출자에 있습니다.

TrackGraph<TState>(Object, TState, Func<EntityEntryGraphNode<TState>,Boolean>)

탐색 속성을 트래버스하여 연결할 수 있는 엔터티 및 엔터티 추적을 시작합니다. 순회는 재귀적이므로 검색된 엔터티의 탐색 속성도 검색됩니다. 지정된 엔터티는 검색된 callback 각 엔터티에 대해 호출되며 각 엔터티를 State 추적하도록 설정해야 합니다. 상태가 설정되지 않은 경우 엔터티는 추적되지 않은 상태로 유지됩니다.

이 메서드는 컨텍스트의 한 인스턴스를 사용하여 엔터티를 검색한 다음 컨텍스트의 다른 인스턴스를 사용하여 변경 내용을 저장하는 연결이 끊긴 시나리오에서 사용하도록 설계되었습니다. 이 예제는 한 서비스 호출이 데이터베이스에서 엔터티를 검색하고 다른 서비스 호출이 엔터티에 대한 변경 내용을 유지하는 웹 서비스입니다. 각 서비스 호출은 호출이 완료될 때 삭제되는 컨텍스트의 새 인스턴스를 사용합니다.

일반적으로 그래프의 통과는 이미 추적된 엔터티가 발견되거나 추적할 수 없는 엔터티에 도달할 때마다 중지되어야 합니다. 이 일반적인 동작의 경우 오버로드를 TrackGraph(Object, Action<EntityEntryGraphNode>) 사용합니다. 반면에 이 오버로드는 콜백이 통과가 종료되는 시기를 결정할 수 있지만, 통과가 무한 루프로 들어가지 않도록 하기 위해 호출자에 있습니다.

이벤트

StateChanged

연결된 DbContext 엔터티에 의해 추적되는 엔터티가 서로 EntityState 이동했을 때 발생하는 이벤트입니다.

이 이벤트는 컨텍스트에 의해 처음 추적될 때 엔터티에 대해 발생하지 않습니다. 컨텍스트가 Tracked 엔터티 추적을 시작할 때 이벤트를 사용하여 알림을 받습니다.

Tracked

엔터티가 추적 쿼리에서 반환되었거나 컨텍스트에 연결되거나 추가되었기 때문에 컨텍스트에서 엔터티를 추적할 때 발생하는 이벤트입니다.

명시적 인터페이스 구현

IInfrastructure<IStateManager>.Instance
사용되지 않습니다.

추적된 엔터티에 대한 정보를 저장하는 데 사용되는 내부 상태 관리자를 가져옵니다.

이 속성은 확장 메서드에서 사용하기 위한 것입니다. 애플리케이션 코드에서 사용할 수 없습니다.

IResettableService.ResetState()

풀에서 사용할 수 있도록 서비스를 다시 설정합니다.

IResettableService.ResetStateAsync(CancellationToken)

컨텍스트가 추적하는 엔터티 인스턴스에 대한 변경 내용 추적 정보 및 작업에 대한 액세스를 제공합니다. 이 클래스의 인스턴스는 일반적으로 가져오 ChangeTracker 며 애플리케이션 코드에서 직접 생성되도록 설계되지 않았습니다.

확장 메서드

ToDebugString(ChangeTracker, ChangeTrackerDebugStringOptions, Int32)

지정된 메타데이터의 사람이 읽을 수 있는 표현을 만듭니다.

경고: 반환된 문자열의 형식을 사용하지 마세요. 디버깅 전용으로 설계되었으며 릴리스 간에 임의로 변경될 수 있습니다.

GetInfrastructure<T>(IInfrastructure<T>)

를 사용하여 IInfrastructure<T>숨기는 속성에서 값을 가져옵니다.

이 메서드는 일반적으로 데이터베이스 공급자(및 기타 확장)에서 사용됩니다. 일반적으로 애플리케이션 코드에는 사용되지 않습니다.

IInfrastructure<T> 는 애플리케이션 코드에서 사용되지 않지만 데이터베이스 공급자 등에서 작성한 확장 메서드에 사용할 수 있는 속성을 숨기는 데 사용됩니다.

적용 대상