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 디미트로프의 제안 참조) 한 몇 가지 코드를 고정 할 때이 작업을 얻기 위해 관리했습니다, 그러나 , 나는 아직도 어떤 이상한 행동을 일으킬 수있는 것을 이해하지 못한다. (명백한 예외를받는 대신에). 그래서이 순간은 여전히 수수께끼로 남아 있습니다.
도 의심 스럽지만이 테스트는 병렬로 실행되지 않습니다. –
병렬로 실행되지 않더라도 부실 개체는 이전 테스트 실행에서 세션에 남아있을 수 있습니다. 그렇기 때문에 각 테스트마다 새 세션을 만드는 것이 좋습니다. –
사실이지만 새 세션을 만듭니다. 또한 (세션 풀에서 NHibernate의 세션 풀을 사용하고 ADO.net 연결 풀링에 의존하여) 세션 팩토리를 변경하려고합니다. 하지만 내 세션에 문제가 있어도 A 인스턴스가 동일한 테스트 (및 커밋)의 별도 이전 단계에서 생성되어 나중에 페치되기 때문에 무엇이 발생할 수 있는지 궁금합니다. 두 개의 새로운 대상으로 구성된 협회가 언제 악화 될 수 있었습니까? –