/// <summary> /// Уведомляем всех подписчиков об изменении указанных объектов. /// Объекты в списке могут быть разных типов, метод разделит списки уведомлений, по типам объектов. /// </summary> /// <param name="subject">Subject.</param> public static void NotifyObjectUpdated(params object[] updatedSubjects) { if (ClassMappingList == null) { return; } // Чистим список от удаленных объектов. if (DateTime.Now.Subtract(lastCleaning).TotalSeconds > 1) { delayedNotifies.RemoveAll(d => d.ParentObject == null || d.ChangedObject == null); lastCleaning = DateTime.Now; } foreach (Type subjectType in updatedSubjects.Select(s => NHibernateProxyHelper.GuessClass(s)).Distinct()) { IOrmObjectMapping map = ClassMappingList.Find(m => m.ObjectClass == subjectType); if (map != null) { map.RaiseObjectUpdated(updatedSubjects.Where(s => NHibernateProxyHelper.GuessClass(s) == subjectType).ToArray()); } else { logger.Warn("В ClassMapingList класс {0} объекта не найден. Поэтому событие обновления не вызвано.", subjectType); } // Отсылаем уведомления дочерним объектам если они есть. foreach (DelayedNotifyLink link in delayedNotifies.FindAll(l => OrmMain.Equals(l.ParentObject, updatedSubjects[0]))) { NotifyObjectUpdated(link.ChangedObject); delayedNotifies.Remove(link); } } }
/// <summary> /// Уведомляем всех подписчиков об изменении указанных объектов. /// Объекты в списке могут быть разных типов, метод разделит списки уведомлений, по типам объектов. /// </summary> /// <param name="subject">Subject.</param> public static void NotifyObjectUpdated(EntityChangeEvent[] updatedSubjects) { if (ClassMappingList == null) { return; } var eventsGroups = updatedSubjects .Where(ev => ev.EventType == TypeOfChangeEvent.Insert || ev.EventType == TypeOfChangeEvent.Update) .GroupBy(s => s.EntityClass); foreach (var entityClassGroup in eventsGroups) { IOrmObjectMapping map = ClassMappingList.Find(m => m.ObjectClass == entityClassGroup.Key); if (map != null) { map.RaiseObjectUpdated(entityClassGroup.Select(x => x.Entity).ToArray()); } else { logger.Warn("В ClassMapingList класс {0} объекта не найден. Поэтому событие обновления не вызвано.", entityClassGroup.Key); } } }