anchor.diff:      inherit ServiceFactory<StepLocalBatches>()
       override __.ServiceLifetime = ServiceLifetime.StepLocal
       override __.CreateService(cxt) = StepLocalBatches(cxt.GetService<ExecutionLocalConnectionsFactory, _>())
  -    override __.DisposeService(_) = ()
  +    override __.DisposeService(_, _) = ()
   
   type private CommandErrandArgument(parameters : (obj * DbType) IReadOnlyList) =
       member __.Parameters = parameters
  
positive.code: type private ExecutionLocalConnections(provider : ConnectionProvider) =
      let connections = Dictionary()
      member __.GetConnection(name) =
          let succ, conn = connections.TryGetValue(name)
          if succ then conn else
          let conn = provider.Open(name)
          connections.Add(name, conn)
          conn
      member __.Dispose() = 
          let mutable exn = null
          for KeyValue(_, conn) in connections do
              try
                  conn.Dispose()
              with
              | e -> exn <- e
          connections.Clear()
          if not (isNull exn) then raise exn
      interface IDisposable with
          member this.Dispose() = this.Dispose()
  
  type private ExecutionLocalConnectionsFactory() =
      inherit ServiceFactory<ExecutionLocalConnections>()
  
negative.code:             match cxt.Configuration.TryGetConfig<ConnectionProvider>() with
              | None -> DefaultConnectionProvider() :> ConnectionProvider
              | Some provider -> provider
          ExecutionLocalConnections(provider)
      override __.DisposeService(state, svc) = svc.Dispose(state)
  
  type private StepLocalBatches(conns : ExecutionLocalConnections) =
      let batches = Dictionary()
  