Как я могу обернуть транзакцию вокруг Membership.CreateUser? - PullRequest
3 голосов
/ 03 октября 2008

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

Ответы [ 3 ]

4 голосов
/ 03 октября 2008

Мой реальный жизненный опыт (случался не раз):

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

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

3 голосов
/ 03 октября 2008

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

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

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

0 голосов
/ 03 октября 2008

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

...