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

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


person Danimal    schedule 03.10.2008    source источник


Ответы (3)


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

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

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

person Joe    schedule 03.10.2008
comment
И головные боли DTC. Например, заставить его работать в общей среде... соб... - person Sklivvz; 03.10.2008

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

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

Членство мне больше не нравится...

person Sklivvz    schedule 03.10.2008
comment
Тот же опыт здесь, за исключением части хостинга. Хотя я не уверен, почему TransactionScope всегда хочет требовать DTC, когда это не нужно .... по крайней мере, когда задействовано членство. - person Jon Kragh; 01.03.2011
comment
Насколько вам известно, это все еще современное состояние: то есть вы все еще используете членство и без транзакций, или вы нашли лучшую альтернативу? - person ChrisW; 21.01.2015
comment
@ChrisW на самом деле никто больше не использует членство - person Sklivvz; 21.01.2015
comment
Спасибо. Я предполагаю, что вместо этого люди используют новую систему ASP 'Identity' (или что-то в этом роде?). - person ChrisW; 22.01.2015

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

person DamienG    schedule 03.10.2008