这是一个复杂的问题,我尝试了很多角度,我不记得我有什么,还没有尝试过。但基本上,我的项目包括一些足球联赛的基础课程。我有以下课程:
联盟 - 我图书馆联盟的抽象基类 团队 - 我库中团队的抽象基类
FootballLeague--源自联盟(可能是任何其他类型的联赛,例如BaseballLeague,SoccerLeague等) FootballTeam - 派生自Team(同上)
基本上我想要做的是拥有联盟类中的团队列表,这样我就可以在该类中使用更多通用方法,只能在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?
答案 0 :(得分:1)
public abstract class League<T> where T : Team
{
protected IList<T> mTeams;
public League()
{
mTeams = new List<T>();
}
}
public class FootballLeague : League
{
}
并将mTeams映射为IList和hasmanyToAny以避免输出错误
这对你有用吗?