2010-06-09 6 views
1

У меня есть проект ASP.NET, где я хочу сохранить членство (поставщик SQL) в отдельной базе данных, а роли/профили будут для каждого приложения.Отношение разделения членства и ролей ASP.NET

Вопрос

Что является ключом, который имеет отношение между Membership базой данных и Роли/базы данных профилей? Является ли это UserID или UserName?

Я открыл таблицы в отдельном эксплорере и заметил, что в базе данных Членства отличается идентификатор пользователя, который находится в базе данных Роли приложений.

ответ

-2

Лучшее, что вы можете сделать в этом случае - это реализовать собственный (пользовательский) поставщик членства и роли. Связь между членством и ролями определяется самим собой, и для этого обычно используется имя пользователя.

Замечание об ответах поэта:

Возможно, я не должен был упомянуть «лучшее решение», но, на мой взгляд, членство в сети САШ, и роль поставщика по умолчанию сопровождает таблицы в сеть САШ, которые создаются с помощью САШ -regsql команда. Если поставщик членства и роли Microsoft не полностью удовлетворяет ваши потребности, вы должны создать свой собственный. Если вы создаете свой собственный членский и ролевой провайдер, всем разработчикам будет ясно, что они имеют дело с реализацией поставщика, которая работает или структурирована по-другому.

Мое заключение заключается в том, что мое решение было, пожалуй, не «лучшим решением», а скорее рекомендацией. Другое дело, что поставщики ASP.NET в любом случае не являются примером хорошего дизайна программного обеспечения. Мы все еще используем его из-за их совместимости с другими элементами управления. Ваше решение в порядке, но мое будет так же хорошо, и это до mr. Saif выбрать решение, которое наилучшим образом подходит для его приложения.

Как Microsoft упоминает:

Есть две основные причины для создания пользовательского поставщика членства.

• Вам необходимо сохранить информацию о членстве в источнике данных, который не поддерживается поставщиками членства, включенными в .NET Framework, такими как база данных FoxPro, база данных Oracle или другой источник данных.

• Вам нужно управлять информацией о членстве с использованием

схемы базы данных, которая отличается от схемы базы данных используются поставщиков, которые поставляются с .NET Framework

+1

Я думаю, что внедрение пользовательского провайдера не является ни требованием, ни лучшим решением. –

+0

Не могли бы вы объяснить утверждение «Поставщики ASP.NET не являются примером хорошего дизайна программного обеспечения»? – Greg

+0

Когда моему приложению требуется пользовательская реализация MembershipProvider, которая должна только проверять подлинность и перенаправлять пользователя, она заставляет меня реализовать около 30 методов из базового класса, из которых 90% я никогда не буду использовать. Плохой дизайн! –

2

If I правильно прочитайте свой вопрос, вы хотите сохранить членство в одном экземпляре базы данных и роли в другом.

Это приемлемо и возможно, просто предоставляя различные строки подключения. Вам нет не необходимо реализовать пользовательский поставщик.

Понимание того факта, что роли и членство являются действительно отдельными проблемами, за исключением незначительных кровотечений, создаваемых методом MembershipProvider.DeleteUser, и могут действовать изолированно.

Не существует истинного «отношения» между ролями и таблицами членства, и любые, которые выведены из-за появления записей в таблице aspnet_users, являются совпадающими. Если запись присутствует при запросе роли для пользователя, этот userId используется в противном случае создается новая запись с новым userId.

Общая ценность, используемая во всем стеке провайдера, - это поле username, которое, будучи уникальным для приложения, не является ключом.

Таким образом, до тех пор, пока вы знаете, что вы должны вручную выполнять удаление записей роли при вызове Memberhip.DeleteUser, вы можете просто использовать две базы данных, не требуя специальной реализации.

Удача

+0

Прочтите мое сообщение. Я отвечу на ваш ответ. –