Example #1
0
        protected internal virtual bool IsSameMessageEventSubscriptionAlreadyPresent(EventSubscriptionDeclaration eventSubscription, string tenantId)
        {
            // look for subscriptions for the same name in db:
            IList <EventSubscriptionEntity> subscriptionsForSameMessageName = EventSubscriptionManager.FindEventSubscriptionsByNameAndTenantId(EventType.Message.Name, eventSubscription.UnresolvedEventName, tenantId);
            //TODO 缓存差异
            // also look for subscriptions created in the session: 源码有值
            IList <EventSubscriptionEntity> cachedSubscriptions = DbEntityCache.GetEntitiesByType <EventSubscriptionEntity>(typeof(EventSubscriptionEntity));

            foreach (EventSubscriptionEntity cachedSubscription in cachedSubscriptions)
            {
                //TODO HasTenantId subscriptions
                if (eventSubscription.UnresolvedEventName.Equals(cachedSubscription.EventName) && HasTenantId(cachedSubscription, tenantId) && !subscriptionsForSameMessageName.Contains(cachedSubscription))
                {
                    subscriptionsForSameMessageName.Add(cachedSubscription);
                }
            }

            // remove subscriptions deleted in the same command
            //subscriptionsForSameMessageName = DbEntityManager.PruneDeletedEntities(subscriptionsForSameMessageName);
            subscriptionsForSameMessageName = Context.CommandContext.PruneDeletedEntities <EventSubscriptionEntity>(subscriptionsForSameMessageName);

            // remove subscriptions for different type of event (i.e. remove intermediate message event subscriptions)
            subscriptionsForSameMessageName = FilterSubscriptionsOfDifferentType(eventSubscription, subscriptionsForSameMessageName);

            return(subscriptionsForSameMessageName.Count > 0);
        }