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);
                }
            }
        }
Exemplo n.º 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);
                }
            }
        }
Exemplo n.º 3
0
        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();
                }
            }
        }