【发布时间】:2011-07-23 23:16:19
【问题描述】:
这是一个复杂的问题,我尝试了很多角度,我不记得我有什么,还没有尝试过。但基本上,我的项目包括一些足球联赛的基础课程。我有以下课程:
League - 我的库中一个联赛的抽象基类 Team - 我的库中团队的抽象基类
FootballLeague - 源自 League(可以是任何其他类型的联赛,例如 BaseballLeague、SoccerLeague 等) FootballTeam - 派生自 Team(同上)
基本上我想做的是在 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 使用自动获取/设置延迟加载工作,并且我的团队在实际访问集合之前不会加载。所以基本上在基类中拥有列表访问的成员变量会导致 NIBerate 绕过延迟加载。
这种实现方式是您处理此类库的方式吗?而您有抽象基类应该在列表上具有功能,但派生类也应该能够访问更专业的列表版本?如果没有,我应该如何实现它才能与 NHibernate 一起使用?
【问题讨论】:
标签: c# nhibernate class abstract base