public void ApplyTransactionSupport(IChain chain, IContainer container)
        {
            var shouldFlushOutgoingMessages = chain.ShouldFlushOutgoingMessages();


            var frame = new DbTransactionFrame <NpgsqlTransaction, NpgsqlConnection>
            {
                ShouldFlushOutgoingMessages = shouldFlushOutgoingMessages
            };

            chain.Middleware.Add(frame);
        }
        public void ApplyTransactionSupport(IChain chain, IContainer container)
        {
            var dbType = DetermineDbContextType(chain, container);

            chain.Middleware.Insert(0, new EnrollDbContextInTransaction(dbType));


            var saveChangesAsync = dbType.GetMethod(nameof(DbContext.SaveChangesAsync), new Type[] { typeof(CancellationToken) });
            var @call            = new MethodCall(dbType, saveChangesAsync);

            @call.CommentText = "Added by EF Core Transaction Middleware";

            chain.Postprocessors.Add(@call);

            if (chain.ShouldFlushOutgoingMessages())
            {
                chain.Postprocessors.Add(MethodCall.For <IMessageContext>(x => x.SendAllQueuedOutgoingMessages()));
            }
        }