예제 #1
0
 /// <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);
     }
 }
예제 #2
0
        /// <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);
        }