Может быть, я могу дать вам несколько советов.Я согласен с Дугом в том, что вам следует использовать только один UserRepository, который управляет классами User Aggregate.
Так я бы поступил с (Свободно) Nhibernate:
Класс пользователяс полем перечисления UserType, которое сопоставлено с одним столбцом.Посмотрите эту статью, она очень хорошая, и я несколько раз использовал решение Джимми Богарда (http://lostechies.com/jimmybogard/2008/08/12/enumeration-classes/).. Тогда у вас есть класс UserType, который на самом деле просто представлен в базе данных как столбец в таблице User, НО у вас полный класс с поведением и т. Д..
Затем, чтобы решить ваши различия в том, как каждый тип должен обрабатывать пароли и отношения с клиентами, вы можете использовать шаблон валидатора, чтобы подтвердить, что ваш экземпляр User действителен (на основе вашего UserType), прежде чем сохранять его в БД.в этом блоге http://lostechies.com/jimmybogard/2007/10/24/entity-validation-with-visitors-and-extension-methods/ (снова Джимми ... Должен ли я сказать, что вы должны подписаться на блог Джимми Богарда :)).
Затем у вас есть UserPersistanceValidator, который проверяет, является ли UserType внутренним, pwd не требуется и роль AD должна быть указана.Вы получите картину ...
Надеюсь, это поможет вам.Удачи!