繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM