[英]NHibernate and generic list in abstract base class
这是一个复杂的问题,我已经尝试了很多角度,以至于我不记得自己已经尝试过什么了。 但基本上,我的项目包括一些足球联赛的基础班。 我有以下课程:
联赛-我图书馆中联赛的抽象基类球队-我图书馆中球队的抽象基类
FootballLeague-源自联赛(可以是任何其他类型的联赛,尽管例如BaseballLeague,SoccerLeague等)。FootballTeam-源自团队(同上)
基本上,我想做的是在League类中列出一组球队,因此我可以在该类中拥有可以在Team对象上操作的更通用的方法。 然后,在我的FootballLeague中,可以引用相同的列表,只是取回FootballTeam对象(该列表确实包含该对象)。
到目前为止,这是我最基本的实现:
public abstract class League
{
protected IList mTeams;
}
public abstract class Team
{
public virtual League League
{
get;
protected set;
}
}
public class FootballLeague : League
{
public virtual IList<FootballTeam> Teams
{
get { return this.mTeams.Cast<FootballTeam>().ToList(); }
protected set { this.mTeams = value.ToList(); }
}
public FootballLeague() : base()
{
this.mTeams = new List<FootballTeam>();
this.mConferences = new List<FootballConference>();
}
}
除了NHibernate问题外,这几乎完全符合我的要求。
1)当我加载FootballLeague对象时,它也会同时加载所有FootballTeam对象。 如果我在基类中删除了mTeams声明,并且只对FootballLeague对象中的IList使用了自动获取/设置,那么我的团队将无法加载,直到实际访问该集合为止。 因此,基本上在基类中具有列表访问的成员变量,会导致NHiberate绕过延迟加载。
此实现是您处理此类库的方式吗? 鉴于您具有应该在列表上具有功能的抽象基类,但是派生类也应该也能够访问列表的更专用版本? 如果没有,我应该如何实现它以便与NHibernate一起使用?
public abstract class League<T> where T : Team
{
protected IList<T> mTeams;
public League()
{
mTeams = new List<T>();
}
}
public class FootballLeague : League
{
}
并将mTeam映射为IList和hasmanyToAny以避免转换错误
这对您有用吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.