コード例 #1
0
        public async Task CreateAsync(EmailProvider entity, CancellationToken ct)
        {
            entity.Version++;
            await _dbContext.EmailProviders.InsertOneAsync(entity, new InsertOneOptions(), ct);

            if (entity.DomainEvents.Count > 0)
            {
                await Task.WhenAll(entity.DomainEvents.Select(x => _mediator.Publish(x, ct)));

                entity.ClearDomainEvents();
            }
        }
コード例 #2
0
        public async Task UpdateAsync(EmailProvider entity, CancellationToken ct)
        {
            var filter = Builders <EmailProvider> .Filter.And(
                Builders <EmailProvider> .Filter.Eq(x => x.Id, entity.Id),
                Builders <EmailProvider> .Filter.Eq(x => x.Version, entity.Version)
                );

            entity.Version = (entity.Version == int.MaxValue ? int.MinValue : entity.Version) + 1;

            var result = await _dbContext.EmailProviders
                         .ReplaceOneAsync(filter, entity, new ReplaceOptions { IsUpsert = false }, ct);

            if (result.ModifiedCount == 0)
            {
                throw new MongoUpdateException($"Email provider '{entity.Id}' not updated");
            }

            if (entity.DomainEvents.Count > 0)
            {
                await Task.WhenAll(entity.DomainEvents.Select(x => _mediator.Publish(x, ct)));

                entity.ClearDomainEvents();
            }
        }