public void OnPostLoad(IUnitOfWorkTracked uow, PostLoadEvent loadEvent) { foreach (var listner in PostLoadListeners) { listner.OnPostLoad(uow, loadEvent); } }
public void OnPreLoad(IUnitOfWorkTracked uow, PreLoadEvent loadEvent) { if (loadEvent.Entity is IBusinessObject) { (loadEvent.Entity as IBusinessObject).UoW = (IUnitOfWork)uow; } }
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; } }
public void OnPostCommit(IUnitOfWorkTracked uow) { foreach (var listner in PostCommitListeners) { listner.OnPostCommit(uow); } }
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); }
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)); } }
public void OnPostUpdate(IUnitOfWorkTracked uow, PostUpdateEvent updateEvent) { foreach (var listner in PostUpdateListeners) { listner.OnPostUpdate(uow, updateEvent); } }
public void OnPostInsert(IUnitOfWorkTracked uow, PostInsertEvent insertEvent) { foreach (var listner in PostInsertListeners) { listner.OnPostInsert(uow, insertEvent); } }
public void OnPostDelete(IUnitOfWorkTracked uow, PostDeleteEvent deleteEvent) { var change = new EntityChangeEvent(deleteEvent); foreach (var subscriber in GetSingleSubscribers(change)) { subscriber.Invoke(change); } }
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()); } }
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); }
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); }
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(); }
public void OnPostCommit(IUnitOfWorkTracked uow) { SaveChangeSet((IUnitOfWork)uow); }
public ISingleUowEventListener CreateListnerForNewUow(IUnitOfWorkTracked uow) { return(new HibernateTracker()); }
public void OnPostDelete(IUnitOfWorkTracked uow, PostDeleteEvent deleteEvent) { var change = new EntityChangeEvent(deleteEvent); entityChanges.Add(change); }
public void OnPostUpdate(IUnitOfWorkTracked uow, PostUpdateEvent updateEvent) { var change = new EntityChangeEvent(updateEvent); entityChanges.Add(change); }
public void OnPostInsert(IUnitOfWorkTracked uow, PostInsertEvent insertEvent) { var change = new EntityChangeEvent(insertEvent); entityChanges.Add(change); }
public UowLink(IUnitOfWorkTracked uow) { SessionHashCode = uow.Session.GetHashCode(); this.uow = new WeakReference(uow); this.Title = uow.ActionTitle; }
public ISingleUowEventListener CreateListnerForNewUow(IUnitOfWorkTracked uow) { return(new UowTracker(BatchEventSubscribers)); }
public UowRegistereEventArgs(IUnitOfWorkTracked uow) { UoW = uow; }