Ejemplo n.º 1
0
        ��������private void FlushCollections(IEventSource session)
        ��������
        {
            ������������log.Debug("Processing unreferenced collections");
            �
            ������������ICollection list = IdentityMap.Entries(session.PersistenceContext.CollectionEntries);

            ������������foreach(DictionaryEntry me in list)
            ������������ {
                ����������������CollectionEntry ce = (CollectionEntry)me.Value;

                ����������������if(!ce.IsReached && !ce.IsIgnore)
                ���������������� {
                    ��������������������Collections.ProcessUnreachableCollection((IPersistentCollection)me.Key, session);
                    ����������������
                }
                ������������
            }
            �
            ������������// Schedule updates to collections:
            �
            ������������log.Debug("Scheduling collection removes/(re)creates/updates");

            �
                ������������list = IdentityMap.Entries(session.PersistenceContext.CollectionEntries);
            ������������ActionQueue actionQueue = session.ActionQueue;

            ������������foreach(DictionaryEntry me in list)
            ������������ {
                ����������������IPersistentCollection coll = (IPersistentCollection)me.Key;
                ����������������CollectionEntry       ce   = (CollectionEntry)me.Value;

                �
                ����������������if(ce.IsDorecreate)
                ����������������
                {
                    ��������������������session.Interceptor.OnCollectionRecreate(coll, ce.CurrentKey);
                    ��������������������actionQueue.AddAction(new CollectionRecreateAction(coll, ce.CurrentPersister, ce.CurrentKey, session));
                    ����������������
                }

                ����������������if(ce.IsDoremove)
                ���������������� {
                    ��������������������session.Interceptor.OnCollectionRemove(coll, ce.LoadedKey);
                    ��������������������actionQueue.AddAction(
                        ������������������������new CollectionRemoveAction(coll, ce.LoadedPersister, ce.LoadedKey, ce.IsSnapshotEmpty(coll), session));
                    ����������������
                }
                ����������������if(ce.IsDoupdate)
                ���������������� {
                    ��������������������session.Interceptor.OnCollectionUpdate(coll, ce.LoadedKey);
                    ��������������������actionQueue.AddAction(
                        ������������������������new CollectionUpdateAction(coll, ce.LoadedPersister, ce.LoadedKey, ce.IsSnapshotEmpty(coll), session));
                    ����������������
                }
                ������������
            }
            ������������actionQueue.SortCollectionActions();
            ��������
        }
Ejemplo n.º 2
0
        // Initialize the flags of the CollectionEntry, including the dirty check.
        private void PrepareCollectionFlushes(ISessionImplementor session)
        {
            // Initialize dirty flags for arrays + collections with composite elements
            // and reset reached, doupdate, etc.
            log.Debug("dirty checking collections");

            ICollection list = IdentityMap.Entries(session.PersistenceContext.CollectionEntries);

            foreach (DictionaryEntry entry in list)
            {
                ((CollectionEntry)entry.Value).PreFlush((IPersistentCollection)entry.Key);
            }
        }
Ejemplo n.º 3
0
        // Initialize the flags of the CollectionEntry, including the dirty check.
        protected virtual async Task PrepareCollectionFlushesAsync(ISessionImplementor session, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();
            // Initialize dirty flags for arrays + collections with composite elements
            // and reset reached, doupdate, etc.
            log.Debug("dirty checking collections");

            ICollection list = IdentityMap.Entries(session.PersistenceContext.CollectionEntries);

            foreach (DictionaryEntry entry in list)
            {
                await(((CollectionEntry)entry.Value).PreFlushAsync((IPersistentCollection)entry.Key, cancellationToken)).ConfigureAwait(false);
            }
        }
Ejemplo n.º 4
0
        protected virtual async Task FlushCollectionsAsync(IEventSource session, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();
            log.Debug("Processing unreferenced collections");

            ICollection list = IdentityMap.Entries(session.PersistenceContext.CollectionEntries);

            foreach (DictionaryEntry me in list)
            {
                CollectionEntry ce = (CollectionEntry)me.Value;
                if (!ce.IsReached && !ce.IsIgnore)
                {
                    await(Collections.ProcessUnreachableCollectionAsync((IPersistentCollection)me.Key, session, cancellationToken)).ConfigureAwait(false);
                }
            }

            // Schedule updates to collections:

            log.Debug("Scheduling collection removes/(re)creates/updates");

            list = IdentityMap.Entries(session.PersistenceContext.CollectionEntries);
            ActionQueue actionQueue = session.ActionQueue;

            foreach (DictionaryEntry me in list)
            {
                IPersistentCollection coll = (IPersistentCollection)me.Key;
                CollectionEntry       ce   = (CollectionEntry)me.Value;

                if (ce.IsDorecreate)
                {
                    session.Interceptor.OnCollectionRecreate(coll, ce.CurrentKey);
                    actionQueue.AddAction(new CollectionRecreateAction(coll, ce.CurrentPersister, ce.CurrentKey, session));
                }
                if (ce.IsDoremove)
                {
                    session.Interceptor.OnCollectionRemove(coll, ce.LoadedKey);
                    actionQueue.AddAction(
                        new CollectionRemoveAction(coll, ce.LoadedPersister, ce.LoadedKey, ce.IsSnapshotEmpty(coll), session));
                }
                if (ce.IsDoupdate)
                {
                    session.Interceptor.OnCollectionUpdate(coll, ce.LoadedKey);
                    actionQueue.AddAction(
                        new CollectionUpdateAction(coll, ce.LoadedPersister, ce.LoadedKey, ce.IsSnapshotEmpty(coll), session));
                }
            }
            actionQueue.SortCollectionActions();
        }