ChangeTracker Sınıf

Tanım

Bağlamın takipte olduğu varlık örnekleri için değişiklik izleme bilgilerine ve işlemlerine erişim sağlar. Bu sınıfın örnekleri genellikle 'den elde ChangeTracker edilir ve doğrudan uygulama kodunda tasarlanmaz.

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
Devralma
ChangeTracker
Uygulamalar
IInfrastructure<Microsoft.EntityFrameworkCore.ChangeTracking.Internal.IStateManager> IResettableService

Açıklamalar

Daha fazla EF Core için bkz. değişiklik izleme.

Oluşturucular

ChangeTracker(DbContext)

Bu API, Entity Framework Core altyapısını destekler ve doğrudan kodunuzdan kullanılmaya yönelik değildir. Bu API gelecek sürümlerde değişebilir veya kaldırılabilir.

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

Bu, genel API'lerle aynı uyumluluk standartlarına tabi Entity Framework Core altyapıyı destekleyen bir iç API'dir. Herhangi bir sürümde bildirim olmadan değiştirilebilir veya kaldırılabilir. Bunu yalnızca kodunda son derece dikkatli ve bunun yeni bir sürüme güncelleştirilen uygulama hatalarına neden olacağını bilerek Entity Framework Core gerekir.

ChangeTracker(IStateManager, IChangeDetector, IEntityEntryGraphIterator, DbContext)

Bu API, Entity Framework Core altyapısını destekler ve doğrudan kodunuzdan kullanılmaya yönelik değildir. Bu API gelecek sürümlerde değişebilir veya kaldırılabilir.

Özellikler

AutoDetectChangesEnabled

yönteminin ve ilgili sınıfların yöntemleri tarafından otomatik DetectChanges() olarak çağrılıp çağrılmay olmadığını belirten bir değer alır DbContext veya ayarlar.

Varsayılan değer true şeklindedir. Bu, değişiklik izleme bilgileri gibi işlemleri gerçekleştirmeden veya geri döndürerek önce bağlamın, izilen varlık örneklerde SaveChanges() yapılan değişiklikleri fark eder. Otomatik algılama değişikliklerini devre dışı bıraksanız, varlık örnekleri değiştirildiğinde bunun DetectChanges() çağrılması gerekir. Bunun yapilamamasi, döndürülen değişiklik izleme bilgileri sırasında veya güncel olmayan bazı değişikliklerin SaveChanges() kalıcı olmasıyla sonuçlansa da olabilir.

CascadeDeleteTiming

Bağımlı/alt varlığın, üst/asıl varlığı olarak işaretlendiktan sonra durumunun ne zaman olarak ayarlanacagını belirten bir değer alır Deleted veya Deleted ayarlar. Varsayılan değer: Immediate .

Bağımlı/alt varlıklar yalnızca ilişki ile yapılandırıldığında otomatik olarak Cascade silinir. Bu, gerekli ilişkiler için varsayılan olarak ayarlanır.

Context

Bu değişiklik izleyicinin ait olduğu bağlamı alır.

DebugView

İzlenebilir varlıkların insan tarafından okunabilir bir görünümü için hata ayıklayıcısında bu özelliği genişletin.

Uyarı: Hata ayıklama dizelerinin biçimine güvenme. Bunlar yalnızca hata ayıklama için tasarlanmıştır ve sürümler arasında rastgele değişebilir.

DeleteOrphansTiming

Bir bağımlı/alt varlığın durumunun, bir gezinti veya yabancı anahtar özelliği null olarak ayarlandıktan sonra üst/asıl varlığa göre ne zaman ayarlansa bunu belirten bir değer alır veya Deleted ayarlar. Immediate varsayılan değerdir.

Bağımlı/alt varlıklar yalnızca ilişki ile yapılandırıldığında otomatik olarak Cascade silinir. Bu, gerekli ilişkiler için varsayılan olarak ayarlanır.

LazyLoadingEnabled

İz yüklenen varlıklara yönelik gezinti özelliklerinin ilk erişime yük olup olmadığını belirten bir değer alır veya ayarlar.

Varsayılan değer true şeklindedir. Ancak, yavaş yükleme yalnızca modelde yavaş yükleme için yapılandırılmış varlıkların gezinti özellikleri için gerçekleşir.

QueryTrackingBehavior

Bağlama göre çalıştırlanan LINQ sorgularının izleme davranışını alır veya ayarlar. Değişiklik izlemesini devre dışı bırakmak salt okunur senaryolar için yararlıdır çünkü her varlık örneği için değişiklik izleme ayarlama ek yükünü önler. Varlık örneklerini işlemek ve bu değişiklikleri kullanarak veritabanında kalıcı hale almak için değişiklik izleme özelliğini devre dışı bırakmamanız SaveChanges() gerekir.

Bu yöntem bağlam için varsayılan davranışı ayarlar, ancak ve yöntemlerini kullanarak tek tek sorgular için bu davranışı AsNoTracking<TEntity>(IQueryable<TEntity>) geçersiz AsTracking<TEntity>(IQueryable<TEntity>) kılabilirsiniz.

TrackAll varsayılan değerdir. Bu, değişiklik izleyicinin LINQ sorgusundan döndürülen tüm varlıklar için değişiklikleri takip etmek anlamına gelir.

Yöntemler

AcceptAllChanges()

Bağlamda varlıklarda yapılan tüm değişiklikleri kabul eder. İz edilen varlıkların veritabanının geçerli durumunu temsil edecekleri varsayılır. Bu yöntem genellikle değişiklikler SaveChanges() veritabanına başarıyla kaydedildikten sonra tarafından çağrılır.

CascadeChanges()

Alt/bağımlı varlıkların gerekli bir üst/asıl varlığa göre ya da gerekli üst/asıl varlığın kendisi silindiğinde hemen basamaklı olarak silinmesini zorunlu hale gelir. Bkz. DeleteBehavior.

Bu yöntem genellikle silmeleri uygulama tarafından denetlenen bir zamanda el ile zorlamak için CascadeDeleteTiming ve/veya DeleteOrphansTiming olarak ayarlanmış olduğunda Never kullanılır.

ise, AutoDetectChangesEnabled true bu yöntem yöntemini DetectChanges() çağıracak.

Clear()

Şu anda takipte olan tüm varlıkların izlemesi durur.

DbContext , her iş birimi için yeni bir örneğin oluşturularak kısa bir yaşam süresine sahip olacak şekilde tasarlanmıştır. Bu şekilde, bağlam her iş biriminin sonunda atılırken, tüm izlenen varlıklar atılır. Ancak, yeni bir bağlam örneği oluşturmanın pratik bir yöntem olmadığını durumlarda bu yöntemi kullanarak tüm izlenen varlıkları temizlemek yararlı olabilir.

Bu yöntem, her zaman takip edilen her varlığı ayırmak yerine tercih edilmelidir. Varlıkları ayırmak, yan etkileri olan yavaş bir işlemdir. Bu yöntem, tüm izlenen varlıkları bağlamdan temizleme konusunda çok daha verimlidir.

Varlıklar ayrı ayrı ayrılmamış StateChanged olduğu için bu yöntemin olaylar oluşturmaz.

DetectChanges()

Örnek verilerde yapılan değişiklikleri algılamak için izilen varlık örneklerini tarar. DetectChanges() genellikle güncel bilgiler gerektiğinde (değişiklik izleme bilgileri döndürerek önce ve döndürerek) bağlam SaveChanges() tarafından otomatik olarak çağrılır. Genellikle bu yöntemi yalnızca devre dışı bırakdıysanız çağırmaniz AutoDetectChangesEnabled gerekir.

Entries()

Bağlam EntityEntry tarafından izlenen her varlık için bir döndürür. Girdiler, her varlık için değişiklik izleme bilgilerine ve işlemlerine erişim sağlar.

Bu yöntem, DetectChanges() döndürülen tüm girişlerin güncel durumu yansıtması için çağrısı kullanır. AutoDetectChangesEnabledDetectChanges'in otomatik olarak çağrılması için kullanın.

Döndürülen numaralama üzerinde tekrarlarken varlık durumunun değiştirilmesinin, koleksiyonun numaralandırırken değiştiril olduğunu belirten bir InvalidOperationException sonuçla sonuçlanabilirsiniz. Bunu önlemek için, yinelemeden önce kullanarak ToList<TSource>(IEnumerable<TSource>) veya benzeri bir savunma kopyası oluşturun.

Entries<TEntity>()

Bağlam EntityEntry tarafından izlenen bir türün tüm varlıkları için bir alır. Girdiler, her varlık için değişiklik izleme bilgilerine ve işlemlerine erişim sağlar.

HasChanges()

Yeni, silinmiş veya değiştirilmiş varlıkların izlendiğini denetler; böylece bu değişiklikler veya çağrılsa SaveChanges() veritabanına SaveChangesAsync(CancellationToken) gönderilir.

olarak ayarlanmadıkça DetectChanges() bu AutoDetectChangesEnabled yöntemin çağıran bir yöntem olduğunu false unutmayın.

TrackGraph(Object, Action<EntityEntryGraphNode>)

Bir varlığı ve gezinti özelliklerini geçirerek erişilebilir tüm varlıkları izlemeye başlar. Çapraz geçiş, bulunan varlıkların gezinti özellikleri de taranır. Belirtilen, callback bulunan her varlık için çağrılır ve her State varlığın izne sahip olması gereken ayarlaması gerekir. Hiçbir durum ayarlanmamışsa varlık izlenmeyen olarak kalır.

Bu yöntem, varlıkların bağlamın bir örneği kullanılarak alındığını ve ardından değişikliklerin bağlamın farklı bir örneği kullanılarak kaydedildiğinde bağlantısız senaryolarda kullanım için tasarlanmıştır. Buna bir örnek olarak, bir hizmet çağrısının veritabanından varlıkları, başka bir hizmet çağrısının ise varlıklarda yapılan değişiklikleri kalıcı olarak sürdüğü bir web hizmetidir. Her hizmet çağrısı, çağrı tamamlandığında atlanacak bağlamın yeni bir örneğini kullanır.

Bağlam tarafından zaten izlenmiş bir varlık keşfedildikten sonra bu varlık işlenmez (ve gezinti özellikleri arasında geçiş olmaz).

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

Bir varlığı ve gezinti özelliklerini geçirerek erişilebilir varlıkları izlemeye başlar. Çapraz geçiş, bulunan varlıkların gezinti özellikleri de taranır. Belirtilen, callback bulunan her varlık için çağrılır ve her State varlığın izne sahip olması gereken ayarlaması gerekir. Hiçbir durum ayarlanmamışsa varlık izlenmeyen olarak kalır.

Bu yöntem, varlıkların bağlamın bir örneği kullanılarak alındığını ve ardından değişikliklerin bağlamın farklı bir örneği kullanılarak kaydedildiğinde bağlantısız senaryolarda kullanım için tasarlanmıştır. Buna bir örnek olarak, bir hizmet çağrısının veritabanından varlıkları, başka bir hizmet çağrısının ise varlıklarda yapılan değişiklikleri kalıcı olarak sürdüğü bir web hizmetidir. Her hizmet çağrısı, çağrı tamamlandığında atlanacak bağlamın yeni bir örneğini kullanır.

Genellikle graf çapraz geçişi, zaten izli bir varlıkla karşılaşıldık veya izlenmayacak bir varlığa ulaşıldıklarda durarak devam etmek gerekir. Bu tipik davranış için aşırı yüklemeyi TrackGraph(Object, Action<EntityEntryGraphNode>) kullanın. Öte yandan bu aşırı yükleme, geri çağırmanın geçişin ne zaman sona erer? karar vermesini sağlar, ancak onus, çapraz geçişin sonsuz bir döngü girmey olduğundan emin olmak için çağıranın üzerindedir.

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

Bir varlığı ve gezinti özelliklerini geçirerek erişilebilir tüm varlıkları izlemeye başlar. Çapraz geçiş, bulunan varlıkların gezinti özellikleri de taranır. Belirtilen, callback bulunan her varlık için çağrılır ve her State varlığın izne sahip olması gereken ayarlaması gerekir. Hiçbir durum ayarlanmamışsa varlık izlenmeyen olarak kalır.

Bu yöntem, varlıkların bağlamın bir örneği kullanılarak alındığını ve ardından değişikliklerin bağlamın farklı bir örneği kullanılarak kaydedildiğinde bağlantısız senaryolarda kullanım için tasarlanmıştır. Buna bir örnek olarak, bir hizmet çağrısının veritabanından varlıkları, başka bir hizmet çağrısının ise varlıklarda yapılan değişiklikleri kalıcı olarak sürdüğü bir web hizmetidir. Her hizmet çağrısı, çağrı tamamlandığında atlanacak bağlamın yeni bir örneğini kullanır.

Genellikle graf çapraz geçişi, zaten izli bir varlıkla karşılaşıldık veya izlenmayacak bir varlığa ulaşıldıklarda durarak devam etmek gerekir. Bu tipik davranış için aşırı yüklemeyi TrackGraph(Object, Action<EntityEntryGraphNode>) kullanın. Öte yandan bu aşırı yükleme, geri çağırmanın geçişin ne zaman sona erer? karar vermesini sağlar, ancak onus, çapraz geçişin sonsuz bir döngü girmey olduğundan emin olmak için çağıranın üzerindedir.

Etkinlik

StateChanged

İlişkili tarafından takip edilmiş bir varlık bir taneden DbContext diğerine taşındığında bir olay EntityState başlatıldı.

Bağlam tarafından ilk kez izlenen varlıklar için bu olayın etkin olmadığını unutmayın. Bağlam Tracked bir varlığı izlemeye başladığında bildirilecek olayı kullanın.

Tracked

Bir varlık bir izleme sorgusundan döndürüldü ya da bağlama ekli veya ekli olduğu için bağlam tarafından izleniyorsa bir olay başlatıldı.

Belirtik Arabirim Kullanımları

IInfrastructure<IStateManager>.Instance
Kullanımdan kalktı.

İzilen varlıklarla ilgili bilgileri depolamak için kullanılan iç durum yöneticisini alır.

Bu özellik, uzantı yöntemleri tarafından kullanılmak üzere tasarlanmıştır. Uygulama kodunda kullanılmaya yönelik değildir.

IResettableService.ResetState()

Hizmeti havuzdan kullanılabilmesi için sıfırlar.

IResettableService.ResetStateAsync(CancellationToken)

Uzantı Metotları

ToDebugString(ChangeTracker, ChangeTrackerDebugStringOptions, Int32)

Verilen meta verilerin insanlar tarafından okunabilir bir temsilini oluşturur.

Uyarı: Döndürülen dizenin biçimine güvenme. Yalnızca hata ayıklama için tasarlanmıştır ve sürümler arasında rastgele değişebilir.

GetInfrastructure<T>(IInfrastructure<T>)

Kullanılarak gizlenen bir özellikten değeri alır IInfrastructure<T> .

Bu yöntem genellikle veritabanı sağlayıcıları (ve diğer uzantılar) tarafından kullanılır. Genellikle uygulama kodunda kullanılmaz.

IInfrastructure<T> , uygulama kodunda kullanılması amaçlanmayan ancak veritabanı sağlayıcıları tarafından yazılan genişletme yöntemlerinde kullanılabilen özellikleri gizlemek için kullanılır.

Şunlara uygulanır