Create a stored-procedure to insert multiple rows on a junction table and other tables
So what you want is an insert, an update and a delete procedure for each table.  Then you want a "wrapper" procedure that tracks the inserts/updates/deletes and responds accordingly to errors. 

A "transaction" would be the batch and "rollbacks" would be explicit.  I put these in quotes because you don't want to encompass all of the transactions into a single transaction.  You can't nest user transactions and a large single transaction would cause some serious blocking.

Pseudo Code for inserts...

Exec usp_NewInvoice 
      @purchaseDt=@purchaseDt
    , @fruitID   =@fruitID
    , @driverID  =@driverID
    , @qty       =@qty
    , @price     =@price

--parameters are passed with the variable values created by the app

usp_NewInvoice
      @purchaseDt datetime2
    , @fruitID    int
    , @driverID   int
    , @qty        int
    , @price      money

    TRY
    BEGIN
        @ReturnValue= exec usp_InsertInvoice 
                          @purchaseDt=@purchaseDt
                        , @invoiceID=@invoiceID OUTPUT

        if @ReturnValue&lt;&gt;0 
        BEGIN
            --Error handling and rollback
            goto ERROR
        END
    END

    CATCH
    BEGIN
        @ReturnValue&lt;&gt;0 
        BEGIN
            --Error Handling and rollback
            goto ERROR
    END

    BEGIN
        @ReturnValue= exec usp_InsertInvoiceDetail 
                          @invoiceID =@invoiceID
                        , @fruitID   =@fruitID
                        , @driverID  =@driverID
                        , @qty       =@qty
                        , @price     =@price

        if @ReturnValue&lt;&gt;0 
        BEGIN
            --Error handling and rollback
            goto ERROR
        END
    END

    CATCH
    BEGIN
        @ReturnValue&lt;&gt;0 
        BEGIN
            --Error Handling and rollback
            goto ERROR
    END

ERROR:
IF @ReturnValue &lt;&gt;0
BEGIN
    --RETURN ERROR
END


For each operation you are making sure if succeeded.  If it doesn't you will need to roll back all previous transactions with other procedures (updates and or deletes).  You'll want to do something similar for the updates and deletes.