Тук няма нищо магическо, получавате грешката, защото връзката, която използвате, когато вмъквате CompanyAddress, не е тази, която мислите, че е.
Това е нова връзка. Когато вмъкването на ComapnyPaymentInfo се изпълнява, вие използвате връзката, която вече е свързана с вашата транзакция. Изчаква нови команди, защото сте чакали в предишната стъпка.
Използването на Task.WhenAll() от друга страна ще се опита да използва множество нишки. Ако връзката е заета, изпълнявайки команда, тя няма да бъде използвана и ще се създаде нова.
Не забравяйте, че когато използвате Transactions, имате само една достъпна връзка, не можете да се възползвате от паралелизма.