NHibernate和抽象基类中的泛型列表

时间:2011-07-23 23:16:19

标签: c# nhibernate class abstract base

这是一个复杂的问题,我尝试了很多角度,我不记得我有什么,还没有尝试过。但基本上,我的项目包括一些足球联赛的基础课程。我有以下课程:

联盟 - 我图书馆联盟的抽象基类 团队 - 我库中团队的抽象基类

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?

1 个答案:

答案 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以避免输出错误

这对你有用吗?