【问题标题】:NHibernate and generic list in abstract base class抽象基类中的 NHibernate 和泛型列表
【发布时间】: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


    【解决方案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 以避免转换错误

    这对你有用吗?

    【讨论】:

      猜你喜欢
      • 2013-08-10
      • 1970-01-01
      • 2014-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多