Вам не нужно создавать собственного провайдера. Просто добавьте свой код, чтобы подключить таблицу UserGroupDetails после вызова CreateUser.
К сожалению, вы не можете использовать TransactionScope для отката транзакции в случае сбоя, потому что CreateUsre будет использовать отдельное соединение с базой данных из вашего кода, и для этого потребуется преобразовать транзакцию в разрозненную транзакцию, что очень сложно настроить и настройка.
Самое простое решение - просто проверить сбой CreateUser, и не выполнять второй бит кода, если он потерпит неудачу, и удалить созданного пользователя, если ваш второй бит потерпел неудачу. Однако это не является надежной защитой, поскольку в некоторых случаях вы можете иметь потерянные записи.
Чтобы сделать это в одной транзакции, единственное решение - это специальный провайдер, но я лично не думаю, что оно того стоит.