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); }