2012-03-06 4 views
2

上の条件がtheeseオブジェクト持ちましょう:私が使用RavenDB - 含まれるオブジェクト

public class Obj1 
{ 
    public string Id { get; set; } 
} 

public class Obj2 
{ 
    public string Id { get; set; } 
    public string Obj1Id { get; set; } 
} 

public class Obj3 
{ 
    public string Id { get; set; } 
    public string Obj2Id { get; set; } 
} 

は次のように含まれます:

var objs3 = session.Query<Obj3>() 
    .Customize(x => x.Include<Obj3>(o3 => o3.Obj2Id)) 
    .Take(1000) 
    .ToList(); 
foreach (var obj3 in objs3) 
{ 
    var obj2 = session.Load<Obj2>(obj3.Obj2Id); 
    //do something with it 
} 

私の質問があり、.Whereのようなものをクエリに追加する可能性があります(o2 => o2.Obj1Id == "some/Id")?クエリは、クライアント(LINQの)側のOBJ2について何も知らないが、これはDBへの唯一の要求を行うため、サーバー側では、彼らと一緒に動作します。

私は索引と投影をどのように動作させるかを試していますが、いくつかの構造では不運です。多分私の見解はリレーショナルデータベースから変形されており、私の構造が再定義される必要がある他の解決法があります...

私の他の解決策は、Obj3にObj1Idを追加することです。 ))

オブジェクトにいくつかの余分な情報:
- Obj1とは、顧客ごとに一意であるため、約200の文書
あり - OBJ2:OBJ3が1:、ビュープロパティの独自のポイントと1人の兄弟、それぞれの両方について各顧客の100.000

ボーナスの質問:Inclide連鎖のようなものがありますか? Obj2を含むことの中にObj1を含める? (私は使用しません、ちょうど質問です)

答えて

1

いいえ、あなたは条件に条件を追加することはできません。 それはすべての方法で、あるいは全くのいずれかです。

+0

ので、正しいとクリーンObj1Id複製と私の解決策はありますか? – sasjaq

0

Orenによると、インクルード内に条件があります。つまり、あなたのデータを再構築、またはOBJ2とOBJ3の両方がObj1とのIDのような、何らかの共通点を持っている場合は、インデックスをマルチマップを使用(そしておそらくも削減)することができます。

どちらの方が良いかは、実際にデータの種類によって異なりますが、ここでは一般的な答えはありません。 (たぶん、あなたは代わりにObj1-3のような抽象的な名前の実際のクラス名を持つ別の、より具体的な質問を投稿することができます)。

関連する問題