/// <summary>Begins the track.</summary> /// <param name="provider">The provider.</param> /// <param name="changeTracker">The change tracker.</param> public void BeginTrack(Microsoft.EntityFrameworkCore.ChangeTracking.ChangeTracker changeTracker) { if (!_observers.Any()) { return; } foreach (var objectChanged in changeTracker.SelectObjectsChanged <TEntity>(_properties)) { _transientItens.Enqueue(objectChanged); } }
/// <summary>Selects the objects changed.</summary> /// <typeparam name="T"></typeparam> /// <param name="entries">The entries.</param> /// <param name="properties">The properties.</param> /// <returns></returns> public static IReadOnlyCollection <ObjectChanged <T> > SelectObjectsChanged <T>(this ChangeTracker entries, ICollection <string> properties) where T : class { var itens = new List <ObjectChanged <T> >(); if (entries?.HasChanges() != true) { return(itens); } foreach (var entry in entries.Entries <T>().Where(e => !IgnoreStates.Contains(e.State))) { var propertiesChanged = entry.SelectPropertiesChanged(properties); if (!propertiesChanged.Any()) { continue; } var oc = new ObjectChanged <T>(((int)entry.State), entry.State.ToString(), entry.Entity, propertiesChanged); itens.Add(oc); } return(itens); }