2009-10-02 1 views
0

После вызова методаПотерянные записи в aspnetdb

_membershipProvider.DeleteUser(user.UserName, false); 

где, где второй параметр (ложь) является deleteAllRelatedData, осиротевших записи остаются в базе данных (aspnet_Users таблицы и, возможно, больше). Какова наилучшая практика для их очистки?

EDIT: Код управления пользователя уже изменен, чтобы использовать true в качестве второго параметра, но он оставил db, полный ненужных записей. Мне интересно, как лучше их очистить. Я в настоящее время смотрю на sp, снабженный базой данных dbo.aspnet_Users_DeleteUser, озадачивающей параметр @TablesToDeleteFrom int, задаваясь вопросом, что именно это означает. Похоже, какая-то битмаска.

+2

Вы можете изменить вызов DeleteUser (..., правда)? –

+0

Ницца Боб - вы должны поставить это как ответ. – RichardOD

+0

Да, это правильный ответ, Боб :) Однако, запустив ложный параметр на некоторое время, у нас есть aspnetdb full'o'junk. Вот о чем этот вопрос. – spender

ответ

2

Я думаю, у вас будет выбор Cascade delete или напишите что-нибудь, что работает как работа периодически.

Или еще лучше, как указано в комментарии Боба!

Обновление - похоже, что вы сейчас остановили это из-за происходящего, просто напишите SQL-скрипт, чтобы обнаружить осиротевшие записи, а затем превратите его в оператор DELETE.

+0

Я добавил к моему вопросу ... существует так много ограничений FK, что это делает довольно сложную задачу. Я смотрю на поставляемый SP aspnet_Users_DeleteUser, который, похоже, имеет большую часть этого «обнаружения» уже на месте. – spender

1

Если вы хотите оставить никаких сиротских записей, вы должны установить для второго параметра (deleteAllRelatedData) значение true. Он удалит все связанные и дочерние данные.

http://msdn.microsoft.com/en-us/library/system.web.security.membershipprovider.deleteuser.aspx

+0

К сожалению, барахло уже есть. Ищете отличный способ удалить все. – spender