抽象基类中的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一起工作?
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以避免类型转换错误
这个对你有用吗?