private async Task AppendAsyncCore(IMessage message, ITransaction transaction, CancellationToken cancellationToken)
        {
            var data = await _serializer.SerializeAsync(message, cancellationToken);

            var entity =
                new Entities.OutboxMessage(message.Id, data, message.GetType().FullName, MessageStatuses.Pending.ToString());

            if (transaction is MongoTransaction mongoTransaction && mongoTransaction.Session is not null)
            {
                await _dbContext.Outbox.InsertOneAsync(mongoTransaction.Session, entity, null, cancellationToken)
                .ConfigureAwait(false);
            }
        private async Task AppendAsyncCore(IMessage message, CancellationToken cancellationToken)
        {
            var serialized = await _serializer.SerializeAsync(message, cancellationToken);

            var entity = new Entities.OutboxMessage(message.Id, serialized, message.GetType().FullName)
            {
                Status = MessageStatuses.Pending.ToString()
            };

            _dbContext.OutboxMessages.Add(entity);
            await _dbContext.SaveChangesAsync(cancellationToken)
            .ConfigureAwait(false);
        }
        private async Task AppendAsyncCore(IMessage message, CancellationToken cancellationToken)
        {
            var data = await _serializer.SerializeAsync(message, cancellationToken);

            var entity =
                new Entities.OutboxMessage(message.Id, data.ToArray(), message.GetType().FullName, MessageStatuses.Pending.ToString());

            if (_dbContext.Transaction?.Session != null)
            {
                await _dbContext.Outbox.InsertOneAsync(_dbContext.Transaction.Session, entity, null, cancellationToken)
                .ConfigureAwait(false);
            }
            else
            {
                await _dbContext.Outbox.InsertOneAsync(entity, null, cancellationToken)
                .ConfigureAwait(false);
            }
        }