TransactionScope内で、await使ったりすると、「TransactionScope は、作成されたスレッド上で破棄される必要があります。」 的な例外が発生します。
using (var ctx = new NorthWindEntities()) { using (var ts = new TransactionScope()) { ctx.Employees.Add(new Employee() { LastName = "Nippon", FirstName = "Taro", }); await Task.Delay(1000); // 例として ctx.SaveChanges(); } }
しかし、.NET 4.5.1からは、TransactionScopeAsyncFlowOptionオプションを使うと無問題になります。
using (var ts = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
TransactionScopeを使うかどうかは別問題として。