コード例 #1
0
        private async Task StoreArchiveEventsAsync(IEnumerable <IDomainEvent> archiveEvents, EventStoreDbContext externalCtx)
        {
            switch (_archiveBehavior)
            {
            case SnapshotEventsArchiveBehavior.StoreToNewTable:
                using (var ctx = new EventStoreDbContext(_dbContextOptions))
                {
                    ctx.AddRange(archiveEvents.Select(GetArchiveEventFromIDomainEvent).ToList());
                    await ctx.SaveChangesAsync().ConfigureAwait(false);
                }
                break;

            case SnapshotEventsArchiveBehavior.StoreToNewDatabase:
                if (_archiveBehaviorDbContextOptions != null)
                {
                    using (var ctx = new ArchiveEventStoreDbContext(_archiveBehaviorDbContextOptions))
                    {
                        ctx.AddRange(
                            archiveEvents.Select(GetArchiveEventFromIDomainEvent));
                        await ctx.SaveChangesAsync().ConfigureAwait(false);
                    }
                }
                else
                {
                    throw new InvalidOperationException("EFEventStore.StoreDomainEventAsync() : Snapshot will be created and event to archive cannot be saved because DbContextOptions for archive database weren't provided during configuration on Bootstrapper. Either specify DbContextOptions for event's archive database or change archive behavior");
                }
                break;
            }
            var eventsInContext = externalCtx
                                  .ChangeTracker
                                  .Entries()
                                  .Where(e => e.State != EntityState.Detached && e.State != EntityState.Deleted)
                                  .Select(e => e.Entity as Event)
                                  .WhereNotNull()
                                  .Where(e => archiveEvents.Any(ev => ev.Id == e !.Id))
                                  .ToList();

            if (eventsInContext.Count > 0)
            {
                eventsInContext.DoForEach(e => externalCtx.Entry(e).State = EntityState.Detached);
            }
            using (var ctx = new EventStoreDbContext(_dbContextOptions))
            {
                var archiveEventsIds = archiveEvents.Select(e => e.Id).ToList();
                var events           = await ctx.Set <Event>().Where(e => archiveEventsIds.Contains(e.Id)).ToListAsync().ConfigureAwait(false);

                if (events.Count > 0)
                {
                    ctx.RemoveRange(events);
                    await ctx.SaveChangesAsync().ConfigureAwait(false);
                }
            }
        }
コード例 #2
0
        private async Task StoreArchiveEventsAsync(IEnumerable <IDomainEvent> archiveEvents, EventStoreDbContext externalCtx)
        {
            switch (_archiveBehavior)
            {
            case SnapshotEventsArchiveBehavior.StoreToNewTable:
                using (var ctx = new EventStoreDbContext(_dbContextOptions))
                {
                    ctx.AddRange(archiveEvents.Select(GetArchiveEventFromIDomainEvent).ToList());
                    await ctx.SaveChangesAsync().ConfigureAwait(false);
                }
                break;

            case SnapshotEventsArchiveBehavior.StoreToNewDatabase:
                using (var ctx = new ArchiveEventStoreDbContext(_archiveBehaviorDbContextOptions))
                {
                    ctx.AddRange(
                        archiveEvents.Select(GetArchiveEventFromIDomainEvent));
                    await ctx.SaveChangesAsync().ConfigureAwait(false);
                }
                break;
            }
            var eventsInContext = externalCtx
                                  .ChangeTracker
                                  .Entries()
                                  .Where(e => e.State != EntityState.Detached && e.State != EntityState.Deleted)
                                  .Select(e => e.Entity as Event)
                                  .WhereNotNull()
                                  .Where(e => archiveEvents.Any(ev => ev.Id == e.Id))
                                  .ToList();

            if (eventsInContext.Count > 0)
            {
                eventsInContext.DoForEach(e => externalCtx.Entry(e).State = EntityState.Detached);
            }
            using (var ctx = new EventStoreDbContext(_dbContextOptions))
            {
                var archiveEventsIds = archiveEvents.Select(e => e.Id).ToList();
                var events           = await ctx.Set <Event>().Where(e => archiveEventsIds.Contains(e.Id)).ToListAsync().ConfigureAwait(false);

                if (events.Count > 0)
                {
                    ctx.RemoveRange(events);
                    await ctx.SaveChangesAsync().ConfigureAwait(false);
                }
            }
        }
コード例 #3
0
ファイル: EventStoreManager.cs プロジェクト: sputier/CQELight
        internal static void Activate()
        {
            CoreDispatcher.OnEventDispatched += OnEventDispatchedMethod;

            using (var ctx = new EventStoreDbContext(s_Options.DbContextOptions, s_Options.ArchiveBehavior))
            {
                ctx.Database.Migrate();
            }
            if (s_Options.ArchiveBehavior == SnapshotEventsArchiveBehavior.StoreToNewDatabase &&
                s_Options.ArchiveDbContextOptions != null)
            {
                using (var ctx = new ArchiveEventStoreDbContext(s_Options.ArchiveDbContextOptions))
                {
                    ctx.Database.Migrate();
                }
            }
        }