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

本文关键字:泛型 列表 NHibernate 基类 抽象 | 更新日期: 2023-09-27 18:03:23

这是一个复杂的问题,我已经尝试了很多角度,我不记得我已经尝试过和还没有尝试过的。但基本上,我的项目由一些足球联赛的基类组成。我有以下类:

League -在我的库中一个League的抽象基类Team -我的库中团队的抽象基类

FootballLeague -源自League(可以是任何其他类型的联赛,但如棒球联赛,足球联赛等)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对象中的illist使用自动获取/设置,则延迟加载工作,并且我的团队在实际访问集合之前不会加载。所以基本上,列表在基类中访问的成员变量,会导致nhibernate绕过延迟加载。

这个实现是你处理这种类型库的方式吗?而你的抽象基类应该在列表上有功能,但派生类也应该能够访问列表的更专门的版本?如果不是,我应该如何实现它,使它与NHibernate一起工作?

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

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以避免类型转换错误

这个对你有用吗?