2009-04-22 3 views
0

많은 OrderItem이있는 Order 매핑이 있습니다. 매핑은 Order에서만 저장을 수행 할 때 Order와 OrderItem을 모두 데이터베이스에 올바르게 저장합니다. 그러나 해당 순서를 다시로드하면 해당 순서가 포함하는 OrderItem 목록에 null 값이 채워집니다. Order)의 외부 키가있는 OrderItem에 도달 할 때까지 테이블을 갱신하십시오. 따라서 Null 오더 항목의 총 수는 OrderItems 테이블의 행 수입니다 (Order와 관련된 실제 주문 항목은 제외됨). 여기 내 매핑입니다 :일대 다 nHibernate Null 목록 값

주문 :

<list name="OrderItems" table="OrderItems" cascade="all" inverse="true" > 
    <key column="OrderID"/> 
    <index column="OrderItemID" /> 
    <one-to-many class="OrderItem" not-found="ignore" /> 
</list> 

OrderItem에 : 나는 nHibernate 수는 같은 목록을 지원하지 않습니다 읽어

public class Order : { 
    private IList<OrderItem> orderItems = new List<OrderItem>(); 

: 여기

<many-to-one name="Order" class="Order" column="OrderID" not-null="true" /> 

는 주문의 클래스 구현의 관계의 많은 부분이지만, 저장은 올바르게 작동합니다. 단지 부하가 ​​아닙니다. 이 작업을 수행하려면 Sets로 모든 것을 변환해야합니까? 그냥 내 머리 위로의

답변

1

나는

<list> 

와 가진 문제를 기억하고 .NET은 IList 인터페이스에 매핑

대신
<bag> 

에 의존. 그게 당신의 문제를 해결할 수 있는지 확실하지 않습니다. 도움이 될 수 있습니다 무엇

가있는 console.out 로깅을 활성화하여 데이터베이스를 타격하는 실제 SQL은 당신이 기대하는 것과 다른 방법을 찾는 것입니다 ( see this blog)

+0

가방으로 바뀌었고 멋졌습니다! – Josh

0

이가 발생하지 귀하의 OrderItems에 수집 때문에 게으른로드입니까? 목록 (또는 가방) 매핑에 lazy = false를 지정하면이 경우가 아니어야합니다.

본격적인 질문은 OrderItems를 게으른로드 할 것인지 여부입니다. :)