2011-08-15 7 views
1

したがって、FluentNHibernateを使用して複雑なオブジェクトグラフのルートオブジェクトを取得するリポジトリを呼び出します。しかし、いくつかのサブレベルのオブジェクトでは、すべての要素を取得するのではなく、日付パラメータが特定の条件に等しいオブジェクトのみを取得したいと考えています。以下のコードでは、OrderTimeフィールドで下位のOrderオブジェクトをこのようにフィルタリングします。FluentNhibernate、部分オブジェクトグラフを取得

意味すべてのユーザーを含むすべてのユーザーグループを取得するが、各ユーザーのOrdersオブジェクトには特定の日付または日付範囲の注文のみが含まれます。

このオブジェクトグラフを取得する方法に関する私の選択肢は何ですか?私は怠惰なローディングを望んでいない、私はちょうど変更されることはありません検索条件のいくつかを指定したい。したがって、最後に示唆されたように、リポジトリの別々の機能にすることができます。 しかし、どのようにこれらのメソッドをコーディングするのですか?これらの条件を指定する方法は?

オブジェクト:

public class UserGroup 
{ 
    public int Id; 
    public IList<User> Users; 
} 

public class User 
{ 
    public int Id; 
    public string Name; 
    public IList<Order> Orders; 
} 

public class Order 
{ 
    public int Id; 
    public decimal Price; 
    public System.DateTime OrderTime; 
} 

リポジトリ:

public class UserGroupRepository 
{  
    public List<UserGroup> GetAll() 
    { 
     using (ISession session = FNH_Manager.OpenSession()) { 
      dynamic obj = session.CreateCriteria(typeof(UserGroup)).List<UserGroup>(); 
      return obj; 
     } 
    } 
} 

潜在的な新しいリポジトリ方法:?

public List<UserGroup> GetAll_FilterOrderDate(System.DateTime _date) 
{ 
} 

public List<UserGroup> GetAll_FilterOrderDate(List<System.DateTime> _dates) 
{ 
} 

答えて

0

本当にあなたが注文したいことに依存します。

集約ルートを照会する必要がありますか?実際の注文を日付で照会するのは意味がありますか?したがって、あなたは次のようになります:

session.QueryOver<Order>().Where(t => t.OrderDate > ...); 

あなたの関連付けが正しく設定されていれば、引き続きユーザーにナビゲートすることができます。個人的に

は、私は少し限定的にリポジトリのパターンを見つけ、むしろクエリオブジェクトを使用しますので、あなたのようなもので終わるだろう:

queryService.FindAll<UserGroup>(new GetAllByFilterOrderDate(DateTime.Now)); 

しかしリポジトリの概念は、あなたのために働く場合覚えておいてください。しかし、これはあなたのオブジェクトモデルをこの「UserGroup」中心のビューに強制しようとします。

+0

ありがとうございます!私はルートクエリが必要かどうか分からない。しかし、スタートアップ時に実行時全体に必要な完全なオブジェクトグラフをロードしています。注文を取得する私の目的は、それらをランタイムオブジェクトにロードすることであり、ロジックの範囲はそれらに依存します。おそらく、クエリでさまざまなサービスを呼び出すことによって、オブジェクトグラフをより段階的に構築することができました。もちろん、これらのサービスをコーディングする方法を学ぶ必要があります。しかし、それは私にはっきりと分かりません。私が今使っているものに似たリポジトリメソッドにいくつかのタイプのドリルダウン条件を入れることは可能ですか? – bretddog

+0

@jonnii - これは興味深い実装です。使用しているFindAllメソッド/クエリクラスの実装に関する詳細をいくつか提供できますか? – csano

関連する問題