Как я могу обернуть транзакцию вокруг Membership.CreateUser?

Я использую asp.net SqlMembershipProvider и LinqToSql в приложении для хобби/обучения. У меня есть некоторые свойства пользователя, которые я храню в LinqtoSql, поэтому мой поток: Membership.CreateUser → MyClass.AddUserDetails. Я хотел бы обернуть все это в транзакцию, поэтому, если бит myclass терпит неудачу, я могу отбросить бит членства. Любые предложения о том, как это сделать?

3 ответа

Поставщики явно не поддерживают транзакции, я попросил эту функцию некоторое время назад:

http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=102268

Я думаю, что если вы используете класс TransactionScope, он должен работать, хотя у вас будут накладные расходы на транзакцию, скоординированную MSDTC.


Мой реальный жизненный опыт (произошло не раз):

  • младший программист пишет сайт.
  • Во время проверки кода я улавливаю недостающую транзакцию между созданием пользователя и созданием профиля (обычно с помощью настраиваемого SqlProvider)
  • Мы переносим все транзакции DTC.
  • Ничто не работает на компьютере младшего программиста.
  • Исправить DTC на компьютере младшего программиста.
  • Развертывание в среде общедоступного хостинга.
  • В среде хостинга ничего не работает.
  • Откажитесь в течение 4 часов с хостинговой компанией, пытающейся исправить их код DTC.
  • Удалить транзакцию, потому что сайт должен выйти в интернет.
  • Помолитесь.

Мне больше не нравится членство...


Вы можете установить свойство транзакции DataContext, чтобы оно участвовало в транзакции, которую вы уже имеете.

licensed under cc by-sa 3.0 with attribution.