поддержкой ассинхронности async/await.
более развернуто. есть набор хранимок, которые спрятаны за методами класса (ов).
хочу сделать так, чтобы можно было обернуть последовательность таких вызовов транзакцией.
простой вариант - протянуть руками через вызовы условный IDbTransaction. но енто плохо, потому что придётся переписать слишком много всего, не факт, что реально.
хотелось бы сделать по аналогии с аспектом транзакций спринга. но вопрос как быть с async/await.
то есть очень просто сделать через какой-нибудь Thread.SetData. типо запихнуть туда транзакцию, потом при создании объекта DbCommand смотреть в данные потока и устанавливать транзакцию если не пусто.
но при асинхронной работе, по завершеннии одного метода, мы можем оказаться в другом потоке пула.
и тогда надо как-то этот контекст с транзакцией восстанавливать и убирать. я так понимаю, что через SynchronizationContext.SetSynchronizationContext.
но никогда такого не делал и не до конца понимаю.
есть эксперты?
https://msdn.microsoft.com/ru-ru/library/system.transactions.transactionscope%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396
или вот такая штука https://msdn.microsoft.com/ru-ru/library/system.data.common.dbtransaction%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396 реализация вот http://referencesource.microsoft.com/#System.Data/System/Data/SqlClient/SqlTransaction.cs,08d231d947124235
Обсуждают сегодня