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); } } }
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>()); }
public EfOutboxEventStore(IContextWithEventOutbox db) { _db = db; }
private Task MigrateOutboxAsync(IContextWithEventOutbox context) { //TODO:throw new NotImplementedException(); return(Task.CompletedTask); }