Nhibernate映射责任模式
我正在实施福勒的责任模式。我有一个Party,子类是User和PeopleGroup。我有责任感和责任感类型。我将Party映射为一个表,而User和PeopleGroup都映射为单独的表。最后还有一个问责与政党对照表 所以这一切都很好,但问题是。 如果我找一个人群说Nhibernate映射责任模式,nhibernate,mapping,design-patterns,Nhibernate,Mapping,Design Patterns,我正在实施福勒的责任模式。我有一个Party,子类是User和PeopleGroup。我有责任感和责任感类型。我将Party映射为一个表,而User和PeopleGroup都映射为单独的表。最后还有一个问责与政党对照表 所以这一切都很好,但问题是。 如果我找一个人群说 pg.ChildAccountablities.Where(x=>x.PartyType == "User") 因此,获得所有属于User类型的参与方后,我不能将该参与方强制转换为用户。我想这是在向上投射 我之所以需要这样
pg.ChildAccountablities.Where(x=>x.PartyType == "User")
因此,获得所有属于User类型的参与方后,我不能将该参与方强制转换为用户。我想这是在向上投射
我之所以需要这样做,是因为我正在使用一个许可系统,该系统具有用户界面(IUser)来识别它。我想说的是,让所有分配给这个peoplegroup的用户都获得这个权限。但是许可系统接口需要一个带有IUser接口的类来完成任务,当然,参与方没有这个类
也许我可以这样说
_repository.Query<User>(x=>x.ParentAccountabilities.Any(y=>y.Parent == myPeopleGroup))
\u repository.Query(x=>x.ParentAccountabilities.Any(y=>y.Parent==myPeopleGroup))
但这似乎是一种迂回的方式
对此问题的任何想法或见解都将不胜感激
谢谢
雷夫
更新
这里有一个链接到福勒的文章
代码或者更确切地说是映射如下
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);
}
}
公共类PartyMap:DomainEntityMap
{
公共聚会地图
{
HasManyToMany(x=>x.ParentAccountabilities).Access.CamelCaseField(前缀.下划线).LazyLoad();
HasManyToMany(x=>x.ChildAccountabilities).Access.CamelCaseField(前缀.下划线).LazyLoad();
}
}
公共类PeopleGroupMap:子类映射
{
公共人物群组地图()
{
Map(x=>x.Name);
}
}
公共类UserMap:子类映射
{
public UserLoginInfoMap()
{
Map(x=>x.LoginName);
映射(x=>x.Password);
废话废话
}
}
公共类AccountabilityMap:DomainEntityMap
{
公共问责映射()
{
参考文献(x=>x.Parent);
参考文献(x=>x.Child);
参考文献(x=>x.AccountabilityType);
}
}
公共类AccountabilityTypeMap:DomainEntityMap
{
公共责任类型映射()
{
Map(x=>x.Name);
}
}
DomainEntityMap只是DomainEntity的一个映射,所有实体都从中继承,它包含一些基本的内容,如创建日期修改日期等
thx责任守则会有所帮助,但我想它提到了懒散的政党。NH然后创建一个从party派生的代理来表示lazyloaded party实例。可能的解决办法
谢谢你的回复。我不确定急切的装载是否能让我上抛,是吗?第二,任何参考资料对我来说都是新的,但从我的阅读来看,它看起来非常棒。今天晚些时候我会试试的。我必须将party对象重构为一个接口,并去掉party,但这没关系,反正我宁愿这样做。急切加载将允许向上转换,因为没有不能向上转换的代理。ReferenceAny用于接口和基类,您不需要重构