2009-11-23 2 views
0

A와 B 사이에 많은 관계가 있습니다 (리팩토링 등을 고려할 수 있지만 다른 문제입니다). 내 코드는 다음과 같이 수행합니다nhibernate many to many 연관 - 속성이 null을 반환 함

// given aId is the Id of an instance of A, and A has a many to many set of B's 
    A a = myActiveSession.Get<A>(aId); 
    a.Bs.Add(new B() {Name="dave"}); 

및 a.Bs이 NULL이기 때문에 예외를 얻을. 이것은 테스트 스위트의 컨텍스트에서만 발생하며, 단일 테스트를 실행하면 세트가 생기고 모든 것이 정상입니다. 기본값은 게으른 가져 오기이기 때문에 getter 속성에 액세스 할 때 Bs가 초기화되지만이 오류가 발생하면 단순히 null이 아닌 예외가 발생할 것으로 예상합니다.이 방법을 사용하면 이. 어떤 아이디어?

추신 :

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
namespace="MyNamespace" assembly="MyAssembly"> 
    <class name="A" table="A" dynamic-update="true"> 
    <id name="id" type="integer" access="field"> 
     <column name="ID"/> 
     <generator class="native"/> 
    </id> 
    <property name="name" type="string" access="field"/> 
    <set name="Bs" table="A_B"> 
     <key column="a_id"/> 
     <many-to-many column="b_id" class="B" /> 
    </set> 
    </class> 
</hibernate-mapping> 

UPDATE : 이것은 매핑 내가 세션 정리 (@Darin 디미트로프의 제안 참조) 한 몇 가지 코드를 고정 할 때이 작업을 얻기 위해 관리했습니다, 그러나 , 나는 아직도 어떤 이상한 행동을 일으킬 수있는 것을 이해하지 못한다. (명백한 예외를받는 대신에). 그래서이 순간은 여전히 ​​수수께끼로 남아 있습니다.

답변

1

단위 테스트는 다른 스레드에서 병렬로 실행할 수 있으므로 이러한 테스트는 독립적이어야합니다. 귀하의 경우 Session 개체가 여러 테스트에서 재사용되고 또 하나의 테스트가 Bs 속성으로 엉망이 될 수 있습니다. 세션이 테스트 내에서 생성되고 이후에 삭제됩니다. 즉,

using (var session = sessionFactory.OpenSession()) 
{ 
    A a = myActiveSession.Get<A>(aId); 
} 
+0

도 의심 스럽지만이 테스트는 병렬로 실행되지 않습니다. –

+0

병렬로 실행되지 않더라도 부실 개체는 이전 테스트 실행에서 세션에 남아있을 수 있습니다. 그렇기 때문에 각 테스트마다 새 세션을 만드는 것이 좋습니다. –

+0

사실이지만 새 세션을 만듭니다. 또한 (세션 풀에서 NHibernate의 세션 풀을 사용하고 ADO.net 연결 풀링에 의존하여) 세션 팩토리를 변경하려고합니다. 하지만 내 세션에 문제가 있어도 A 인스턴스가 동일한 테스트 (및 커밋)의 별도 이전 단계에서 생성되어 나중에 페치되기 때문에 무엇이 발생할 수 있는지 궁금합니다. 두 개의 새로운 대상으로 구성된 협회가 언제 악화 될 수 있었습니까? –