Exemple #1
0
        public async Task MigrateAsync()
        {
            if (!_options.EnableInbox && !_options.EnableOutbox)
            {
                return;
            }

            if (_options.EnableInbox)
            {
                IContextWithEventInbox context = _sp.GetRequiredService <IContextWithEventInbox>();
                if ((await context.Context.Database.GetAppliedMigrationsAsync()).All(x => x != InboxMigrationName))
                {
                    await MigrateInboxAsync(context);
                }
            }

            if (_options.EnableOutbox)
            {
                IContextWithEventOutbox context = _sp.GetRequiredService <IContextWithEventOutbox>();
                if ((await context.Context.Database.GetAppliedMigrationsAsync()).All(x => x != OutboxMigrationName))
                {
                    await MigrateOutboxAsync(context);
                }
            }
        }
Exemple #2
0
        public override async ValueTask <InterceptionResult <int> > SavingChangesAsync(DbContextEventData eventData,
                                                                                       InterceptionResult <int> result,
                                                                                       CancellationToken cancellationToken = new CancellationToken())
        {
            IContextWithEventOutbox contextWithEventOutbox = GuardCast(eventData);

            if (contextWithEventOutbox.SaveEventsOnSaveChanges)
            {
                var events = GetEvents(eventData.Context);
                if (events.Any())
                {
                    int intResult = 0;

                    using (var transaction = new TransactionScope(new CommittableTransaction(new TransactionOptions()
                    {
                        IsolationLevel = IsolationLevel.ReadCommitted
                    })))
                    {
                        intResult = await eventData.Context.SaveChangesAsync(cancellationToken);

                        // ReSharper disable once MethodHasAsyncOverloadWithCancellation
                        contextWithEventOutbox.EventOutbox.AddRange(events);
                        await eventData.Context.SaveChangesAsync(cancellationToken);

                        transaction.Complete();
                    }

                    OnEventsAdded(events.Select(x => x.Id.ToString()));
                    return(InterceptionResult <int> .SuppressWithResult(intResult));
                }
            }

            return(new InterceptionResult <int>());
        }
Exemple #3
0
 public EfOutboxEventStore(IContextWithEventOutbox db)
 {
     _db = db;
 }
Exemple #4
0
 private Task MigrateOutboxAsync(IContextWithEventOutbox context)
 {
     //TODO:throw new NotImplementedException();
     return(Task.CompletedTask);
 }