Я реализую шаблон ответственности Фаулера. У меня есть Party с подклассами User и PeopleGroup. У меня есть Accountability and AccountabilityType. У меня есть Партия, отображаемая как таблица, а User и PeopleGroup отображаются как отдельные таблицы. Затем, наконец, есть контрольная таблица Accountability_Party.Nhibernate mapping accountability pattern
Так что все это прекрасно работает, однако, вот в чем проблема. Если я получаю peoplegroup и сказать
pg.ChildAccountablities.Where(x=>x.PartyType == "User")
, таким образом, получая все Стороны, которые имеют тип пользователя, я не могу тогда бросить партию к пользователю. Это, я думаю, это оживление.
Причина, по которой я должен это сделать, заключается в том, что я использую систему, которая имеет интерфейс для пользователя (IUser), чтобы идентифицировать ее. Я хотел бы сказать, чтобы все пользователи были назначены этой группе людей и дали им это разрешение. Но permissioning интерфейс системы требует класса с интерфейсом IUser на нем для выполнения задания и, конечно, партия не имеет, что Возможно, я мог бы сказать что-то вроде
_repository.Query<User>(x=>x.ParentAccountabilities.Any(y=>y.Parent == myPeopleGroup))
но, похоже, своего рода окольного пути ведения Это.
Любые мысли или идеи по этой проблеме были бы весьма полезными.
Спасибо,
Раифа
Update
здесь ссылка на accountability pattern Фаулера.
Кроме того, код или, вернее, отображения являются
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
Спасибо за ваш ответ. Я не уверен, что если бы страстная загрузка позволила бы мне подняться, не так ли? Secondly ReferencesAny новичок для меня, но из того, что я читаю, он выглядит очень здорово. Я попробую это позже сегодня. Я должен реорганизовать объект партии в интерфейс и избавиться от вечеринки, но это нормально. Я бы предпочел сделать это так или иначе. – Raif
Загрузка с нетерпением позволит повысить эффективность, поскольку нет прокси-сервера, который не может быть оптимизирован. для интерфейсов ** и ** Baseclasses, вам не нужно рефакторировать – Firo
отлично, это хорошая информация. Я ценю это. – Raif