Není zde nic magického, dostanete chybu, protože připojení, které používáte při vkládání CompanyAddress, není takové, jaké si myslíte.
Je to nové spojení. Když je spuštěna vložka ComapnyPaymentInfo, používáte připojení, které je již spojeno s vaší transakcí. Čeká na nové příkazy, protože jste čekali v předchozím kroku.
Na druhé straně použití Task.WhenAll() se pokusí použít více vláken. Pokud je připojení zaneprázdněné prováděním příkazu, nebude použito a vytvoří se nový.
Pamatujte, že při používání Transactions máte k dispozici pouze jedno připojení, nemůžete těžit z paralelismu.