2013-03-04 3 views
3

일반적인 Order 및 OrderLine의 경우 각 OrderLine에는 상위 Order에 대한 참조가 있습니다. OrderLine을 RavenDB에 저장하면 전체 Order 레코드의 복사본을 각 OrderLine의 속성으로 저장합니다. 대신 주문에 대한 링크 만 저장하도록하려면 어떻게해야합니까? 이처럼 : 대신 비 관계형 데이터베이스에이문서 사본을 저장하는 대신 상위 문서에 대한 참조 저장

 { 
     ...other orderline properties... 
     Order : { 
    ...all properties for order 123... 
     } 
} 

답변

3

에 오신 것을 환영의

{ 
...other orderline properties... 
Order : "orders/123" 
} 

! 주문 행은 ID를 얻지 못합니다. 그들은 자신의 문서에 집어 넣지 않습니다. 주문과 관련하여 문제가되는 곳에 저장됩니다!

orders/123 
{ 
    "CustomerId": "customers/456", 
    "Lines": [ 
     { "Product": "Foo", "Quantity": 2, "Price": 10.00 }, 
     { "Product": "Bar", "Quantity": 3, "Price": 20.00 }, 
     { "Product": "Baz", "Quantity": 4, "Price": 30.00 } 
    ] 
    "Total": 200.00 
} 

이 이상 the documentation을 참조하십시오

public class OrderLine 
{ 
    public string Product { get; set; } 
    public int Quantity { get; set; } 
    public decimal Price { get; set; } 
} 

public class Order 
{ 
    public string Id { get; set; } 
    public string CustomerId { get; set; } 
    public List<OrderLine> Lines { get; set; } 
    public decimal Total { get; set; } 
} 

같은 문서를 생성합니다.

+0

물론 Matt입니다.하지만 링크에서 언급하더라도 OrderLine 섹션은 ​​해당 제품의 모든 속성 사본을 저장하는 대신 해당 제품에 대한 참조를 저장합니다. 내 OrderLine 클래스에 Product 유형의 Product 속성이있는 경우 어떻게 구현합니까? 대신 문자열 형식의 ProductID 속성을 갖도록 내 OrderLine 클래스를 변경해야합니까? –

+0

주문 행의 제품 정보가 주문 당시의 상태와 정확히 일치한다고 생각하십시오. 제품이 변경되거나 삭제 된 경우 과거 주문이나 주문 행에 영향을 미치지 않아야합니다. 따라서 필요한 제품의 필드를 주문 행에 복제해야합니다. 참조 목적으로 'ProductId'를 원할 수도 있지만 제품 설명과 가격을 주문서에 별도로 비정규 화해야합니다. 이것을위한 컨테이너 클래스 (예 :'ProductRef')를 만들 수도 있고, 필드를 개별적으로 저장할 수도 있습니다. –

+0

또한 [this] (http://ravendb.net/docs/client-api/querying/handling-document-relationships) –

관련 문제