Borussia Dortmund will play Eintracht Frankfurt in the DFB Cup final after a pulsating 3-2 victory against Bayern Munich at the Allianz Arena in Wednesday's semi-final.