2011-01-18 6 views
4

私はravenDBにオブジェクトがどのくらいきれいに格納されているかのように実用的な質問をしています。RavenDB ID for child documents

QuoteRequest.cs誰かがページを当たったとき

int Id; 
dateTime DateCreated; 
List<Quotes> Quotes; 

Quote.csが

int ProviderId; 
int Price; 
int ServiceDays; 
int ServiceTypeId; 

は、私が吐き出す:

は私が見積もり依頼を考えてみましょう彼らが選ぶことができる引用符のリスト。これらの引用符は、引用要求のインスタンスにのみ関連しています。

私の質問は、リスト内の見積もりなどの子オブジェクトにはデータベースによって生成されたIDがないため、次のページで購入する見積もりを知るためのクエリ文字列を生成するにはどうすればいいですか?

1つのプロバイダIDで複数の引用符を使用できます。

私の考えは、QuoteIdを追加してthis.Quotes.Countに基づいてインクリメントしていますが、これはちょっとハッキリしているようです。または乱数も生成されます。

人々はどのようにしてこのようなことを一般的に処理しますか?

答えて

2

は、あなたが本当に元の引用符で購入を(ユーザーが購入することを選んだものを)関連付ける必要があります本当にわかりませんか?私はあなたが見積もりを取ってそれを購入に変換すると思っています。 そうなら、idについてはまったく心配しないでください。構成要素の値を次のステップに渡すだけです。つまり、DDDの意味での値のように見積もりを扱います。

しかし、あなたはが購入への関連付けを格納する必要がない場合は...まあ、それはあなたが本当にを追跡するを必要なものに依存します。たとえば、QuoteRequestを更新して、選択した見積もりをマークするだけです。 (IsSelectedまたはQuoteクラスQuoteに似たものを追加してください)。その後、購入は見積もりリクエストにリンクされ、フラグを使用して見積もりを識別することができます。

これもやはりコンテキストに依存します(私はそれについて推測しています)。

+0

これは最高の答えですので、私は先に進んで賞を授ける予定です。私は元の見積もりに関連付ける必要があったので、私は子供のドキュメントにIDを作成するように強制する方法を見つけ出しました。それはdoc db/dddの純粋主義者がいることは確かですが、一番簡単な方法でした。ありがとう! – ChickenMilkBomb

+0

私は助けてうれしい! –

1

誰もこれにまだ答えてくれていないので、私はそれをどうやってやるかというだけです。

Idを追加する理由は何ですか?リストのインデックスを使用するだけですか?リクエストは "?quote = 0"で、彼らは位置0で見積もりを取得しますか?

私はここで何かが届かない場合はいえ...

0

1つのオプションは、親オブジェクトに最後に使用されたIDを格納させることです。新しい子オブジェクトを追加するときは、IDカウンタをインクリメントして、それを子に追加します。オブジェクトが保存されると、idカウンタが自動的にインクリメントされます。

public class Post 
{ 
    public int NextCommentId; 
    public List<Comment> Comments; 
    ... 
} 

... 

var comment = new Comment { Id = post.NextCommentId++ }; 
post.Comments.Add(comment); 

session.SaveChanges(); 

上記のコードは、100%正確ではないかもしれませんが、あなたは、少なくともそれを行う方法のアイデアを与える必要があります。

あなたはコメントをブログの記事を持っているとしましょう!