Я реализую Шаблон ответственности Фаулера.У меня есть Party с подклассами User, и PeopleGroup.У меня есть Accountability и AccountabilityType.У меня Party отображается в виде таблицы, а User и PeopleGroup отображаются в виде отдельных таблиц.И, наконец, есть таблица перекрестных ссылок Accountability_Party.
Так что все это работает нормально, однако здесь есть проблема.Если я получу группу людей и скажу
pg.ChildAccountablities.Where(x=>x.PartyType == "User")
, получая, таким образом, все Стороны типа Пользователь, я не смогу затем передать Сторону Пользователю.Я полагаю, это отвратительно.
Причина, по которой мне нужно это сделать, заключается в том, что я использую систему прав доступа, которая имеет интерфейс для пользователя (IUser) для его идентификации.Я хотел бы сказать, получить всех пользователей, назначенных для этой группы людей, и дать им это разрешение.Но интерфейс системы разрешений требует класса с интерфейсом IUser для назначения, и, конечно, у Party этого нет. Возможно, я мог бы сказать что-то вроде
_repository.Query<User>(x=>x.ParentAccountabilities.Any(y=>y.Parent == myPeopleGroup))
, но это похоже на окольный путьДелать это.
Буду признателен за любые мысли или идеи по этой проблеме.
Спасибо,
Raif
Обновление
здесь - ссылка на шаблон подотчетности Фаулера.
Также код или, скорее, сопоставления выглядят следующим образом
public class PartyMap : DomainEntityMap<Party>
{
public PartyMap()
{
HasManyToMany(x =>x.ParentAccountabilities).Access.CamelCaseField(Prefix.Underscore).LazyLoad();
HasManyToMany(x =>x.ChildAccountabilities).Access.CamelCaseField(Prefix.Underscore).LazyLoad();
}
}
public class PeopleGroupMap : SubclassMap<PeopleGroup>
{
public PeopleGroupMap()
{
Map(x => x.Name);
}
}
public class UserMap : SubclassMap<User>
{
public UserLoginInfoMap()
{
Map(x => x.LoginName);
Map(x => x.Password);
blah blah blah
}
}
public class AccountabilityMap : DomainEntityMap<Accountability>
{
public AccountabilityMap()
{
References(x => x.Parent);
References(x => x.Child);
References(x => x.AccountabilityType);
}
}
public class AccountabilityTypeMap : DomainEntityMap<AccountabilityType>
{
public AccountabilityTypeMap()
{
Map(x => x.Name);
}
}
DomaineEntityMap - это просто картаDomainEntity, от которого наследуются все сущности и который имеет некоторые базовые вещи, такие как дата создания, дата изменения и т. д.
thx