2011-07-23 22 views
1

これは複雑な質問のようなものです。私は何を覚えていないのか、まだ試していないのですか?しかし、基本的には、私のプロジェクトはサッカーリーグの基本クラスで構成されています。抽象基本クラスのNHibernateとgenericリスト

マイライブラリにチームのために抽象基底クラスFootballLeague - - マイライブラリ チームでリーグの抽象基本クラス -

リーグリーグ由来は(リーグの他のタイプのようになります。私は、以下のクラスを持っています FootballTeam - チームから派生しました(上記と同じ)

基本的にはリーグクラスのチームのリストがありますので、より一般的な方法を使用することができますチームオブジェクトだけで操作できるクラスです。私の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で動作するように実装する方法は? IListのとhasmanyToAnyなど

答えて

1
public abstract class League<T> where T : Team 
{ 
    protected IList<T> mTeams; 

    public League() 
    { 
     mTeams = new List<T>(); 
    } 
} 

public class FootballLeague : League 
{ 
} 

とマップmTeamsキャストエラーに

を避けるために、あなたのためにこの仕事をしていますか?

関連する問題