Example #1
0
 public void OnPostLoad(IUnitOfWorkTracked uow, PostLoadEvent loadEvent)
 {
     foreach (var listner in PostLoadListeners)
     {
         listner.OnPostLoad(uow, loadEvent);
     }
 }
Example #2
0
 public void OnPreLoad(IUnitOfWorkTracked uow, PreLoadEvent loadEvent)
 {
     if (loadEvent.Entity is IBusinessObject)
     {
         (loadEvent.Entity as IBusinessObject).UoW = (IUnitOfWork)uow;
     }
 }
Example #3
0
 public void OnPostInsert(IUnitOfWorkTracked uow, PostInsertEvent insertEvent)
 {
     if (insertEvent.Entity is IBusinessObject && (insertEvent.Entity as IBusinessObject).UoW == null)
     {
         (insertEvent.Entity as IBusinessObject).UoW = (IUnitOfWork)uow;
     }
 }
Example #4
0
 public void OnPostCommit(IUnitOfWorkTracked uow)
 {
     foreach (var listner in PostCommitListeners)
     {
         listner.OnPostCommit(uow);
     }
 }
Example #5
0
 public void OnPostDelete(IUnitOfWorkTracked uow, PostDeleteEvent deleteEvent)
 {
     foreach (var listner in PostDeleteListeners)
     {
         listner.OnPostDelete(uow, deleteEvent);
     }
 }
        public void OnPostDelete(PostDeleteEvent @event)
        {
            //Из-за бага\фичи в Nh, приходят по 2 одинаковых события.
            if (lastPostDeleteEntity == @event.Entity)
            {
                return;
            }
            lastPostDeleteEntity = @event.Entity;

            IUnitOfWorkTracked uow = GetUnitOfWork(@event.Session);

            if (uow == null)
            {
                logger.Warn("Пришло событие PostLoadEvent но соответствующий сессии UnitOfWork не найден.");
                return;
            }

            lock (PostDeleteListeners)
            {
                foreach (var listner in PostDeleteListeners)
                {
                    listner.OnPostDelete(uow, @event);
                }
            }

            uow.EventsTracker.OnPostDelete(uow, @event);
        }
Example #7
0
        public void OnPostUpdate(IUnitOfWorkTracked uow, PostUpdateEvent updateEvent)
        {
            var entity = updateEvent.Entity as IDomainObject;

            // Мы умеет трекать только объекты реализующие IDomainObject, иначе далее будем падать на получении Id.
            if (entity == null || !NeedTrace(entity))
            {
                return;
            }

            //FIXME добавлено чтобы не дублировались записи. Потому что от Nhibernate приходит по 2 события на один объект. Если это удастся починить, то этот код не нужен.
            if (changes.Any(hce => hce.EntityId == entity.Id && NHibernateProxyHelper.GuessClass(entity).Name == hce.EntityClassName))
            {
                return;
            }

            var fields = Enumerable.Range(0, updateEvent.State.Length)
                         .Select(i => FieldChange.CheckChange(i, updateEvent))
                         .Where(x => x != null)
                         .ToList();

            if (fields.Count > 0)
            {
                changes.Add(new ChangedEntity(EntityChangeOperation.Change, updateEvent.Entity, fields));
            }
        }
Example #8
0
 public void OnPostUpdate(IUnitOfWorkTracked uow, PostUpdateEvent updateEvent)
 {
     foreach (var listner in PostUpdateListeners)
     {
         listner.OnPostUpdate(uow, updateEvent);
     }
 }
Example #9
0
 public void OnPostInsert(IUnitOfWorkTracked uow, PostInsertEvent insertEvent)
 {
     foreach (var listner in PostInsertListeners)
     {
         listner.OnPostInsert(uow, insertEvent);
     }
 }
Example #10
0
        public void OnPostDelete(IUnitOfWorkTracked uow, PostDeleteEvent deleteEvent)
        {
            var change = new EntityChangeEvent(deleteEvent);

            foreach (var subscriber in GetSingleSubscribers(change))
            {
                subscriber.Invoke(change);
            }
        }
Example #11
0
 internal static void UnregisterUow(IUnitOfWorkTracked uow)
 {
     RemoveLost();
     lock (RegisteredUoWs)
     {
         var createdString = $"{uow.ActionTitle.CallerMemberName} ({uow.ActionTitle.CallerFilePath}:{uow.ActionTitle.CallerLineNumber})";
         RegisteredUoWs.Remove(uow.Session.GetHashCode());
         logger.Debug("UnitOfWork, созданный в {0}, завершил работу.\n{1}", createdString, ActiveUowCountText());
     }
 }
Example #12
0
 internal static void RegisterUow(IUnitOfWorkTracked uow)
 {
     RemoveLost();
     lock (RegisteredUoWs)
     {
         var uowLink = new UowLink(uow);
         RegisteredUoWs.Add(uow.Session.GetHashCode(), uowLink);
         logger.Debug($"Зарегистрирован новый UnitOfWork. {ActiveUowCountText()}. Создан в {uowLink.Title.CallerMemberName} ({uowLink.Title.CallerFilePath}:{uowLink.Title.CallerLineNumber})");
         UowRegistered?.Invoke(null, new UowRegistereEventArgs(uow));
     }
 }
        /// <summary>
        /// Вызывается только из Uow
        /// </summary>
        internal static void OnPostCommit(IUnitOfWorkTracked uow)
        {
            lock (PostCommitListeners)
            {
                foreach (var listner in PostCommitListeners)
                {
                    listner.OnPostCommit(uow);
                }
            }

            uow.EventsTracker.OnPostCommit(uow);
        }
Example #14
0
        public void OnPostDelete(IUnitOfWorkTracked uow, PostDeleteEvent deleteEvent)
        {
            var entity = deleteEvent.Entity as IDomainObject;

            var type = NHibernateProxyHelper.GuessClass(entity);

            if (!NeedTrace(type))
            {
                return;
            }

            if (changes.Exists(di => di.Operation == EntityChangeOperation.Delete && di.EntityClassName == type.Name && di.EntityId == entity.Id))
            {
                return;
            }

            var hce = new ChangedEntity(EntityChangeOperation.Delete, entity, new List <FieldChange>());

            changes.Add(hce);
        }
Example #15
0
 public void OnPostCommit(IUnitOfWorkTracked uow)
 {
     SubscriberWeakLink[] subscribers;
     lock (ManyEventSubscribers) {
         int counts = ManyEventSubscribers.Count;
         ManyEventSubscribers.RemoveAll(s => !s.IsAlive);
         subscribers = ManyEventSubscribers.ToArray();
         if (ManyEventSubscribers.Count != counts)
         {
             logger.Debug($"Очищено {counts - ManyEventSubscribers.Count} протухших подписчиков. Осталось {ManyEventSubscribers.Count} подписчиков.");
         }
     }
     foreach (var subscriber in subscribers)
     {
         var changes = entityChanges.Where(subscriber.IsSuitable).ToArray();
         if (changes.Length > 0)
         {
             logger.Debug($"Вызываем подписчика [{subscriber}]");
             subscriber.Invoke(changes);
         }
     }
     entityChanges.Clear();
 }
Example #16
0
 public void OnPostCommit(IUnitOfWorkTracked uow)
 {
     SaveChangeSet((IUnitOfWork)uow);
 }
Example #17
0
 public ISingleUowEventListener CreateListnerForNewUow(IUnitOfWorkTracked uow)
 {
     return(new HibernateTracker());
 }
Example #18
0
        public void OnPostDelete(IUnitOfWorkTracked uow, PostDeleteEvent deleteEvent)
        {
            var change = new EntityChangeEvent(deleteEvent);

            entityChanges.Add(change);
        }
Example #19
0
        public void OnPostUpdate(IUnitOfWorkTracked uow, PostUpdateEvent updateEvent)
        {
            var change = new EntityChangeEvent(updateEvent);

            entityChanges.Add(change);
        }
Example #20
0
        public void OnPostInsert(IUnitOfWorkTracked uow, PostInsertEvent insertEvent)
        {
            var change = new EntityChangeEvent(insertEvent);

            entityChanges.Add(change);
        }
Example #21
0
 public UowLink(IUnitOfWorkTracked uow)
 {
     SessionHashCode = uow.Session.GetHashCode();
     this.uow        = new WeakReference(uow);
     this.Title      = uow.ActionTitle;
 }
Example #22
0
 public ISingleUowEventListener CreateListnerForNewUow(IUnitOfWorkTracked uow)
 {
     return(new UowTracker(BatchEventSubscribers));
 }
Example #23
0
 public UowRegistereEventArgs(IUnitOfWorkTracked uow)
 {
     UoW = uow;
 }