Как я могу обернуть транзакцию вокруг Membership.CreateUser?
-
03-07-2019 - |
Вопрос
Я использую asp.net SqlMembershipProvider и LinqToSql в приложении для хобби/обучения.У меня есть некоторые пользовательские свойства, которые я храню в LinqtoSql, поэтому мой процесс таков:Membership.CreateUser -> MyClass.AddUserDetails.Я хотел бы обернуть все это в транзакцию, чтобы в случае сбоя бита myclass я мог откатить бит членства.Любые предложения о том, как это сделать?
Решение
Поставщики явно не поддерживают транзакции, я попросил эту функцию некоторое время назад:
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=102268 р>
Я думаю, что если вы используете класс TransactionScope, он должен работать, хотя у вас будут накладные расходы на координированную MSDTC транзакцию.
Другие советы
Мой реальный жизненный опыт (случалось не раз):
- Младший программист пишет сайт.
- Во время проверки кода я обнаруживаю недостающую транзакцию между созданием пользователя и созданием профиля (обычно с помощью специального SqlProvider).
- Мы оборачиваем все в транзакцию DTC.
- На компьютере младшего программиста ничего не работает.
- Исправьте DTC на компьютере младшего программиста.
- Развертывание в среде общего хостинга.
- В среде хостинга ничего не работает.
- Спорьте 4 часа с хостинговой компанией, пытающейся исправить их DTC.
- Удалить транзакцию, потому что сайт имеет выйти в интернет.
- Молиться.
Мне больше не нравится членство...
Вы можете установить свойство Transaction объекта DataContext, чтобы оно могло участвовать в уже выполненной вами транзакции.