2011-03-15 4 views
0

NH # 1.2에서 NH 3.1으로 C# .NET 3.5 프로젝트를 업그레이드하려고합니다. 나는 어려움을 겪고 있습니다 : myListOfT.contains(someT).NHibernate 3 및 성 프록시 : myList.Contains가 깨졌습니다.

myListOfTsomeT이고 myListOfT[0]someT (Visual Studio "스파이"로 볼 수 있음) 인 것 같습니다. HashCode는 동일합니다. myListOfT[0]someT 모두 Castle.Proxies.T ...

내 코드 및 NH 3.1의 문제점은 무엇입니까?


사용자가 직장 또는 자녀의 일부인 것을 알고 싶습니다. 이러한 맥락에서

public bool UserBelongToWorkplace(Workplace wp, User u) 
    { 
     if (wp.Users.Contains(u)) return true; 

     foreach (Workplace subWp in wp.Workplaces) 
     { 
      return UserBelongToWorkplace(subWp, u); 
     } 
    } 

: wp.Users : ReadOnlyCollection<User> (hides IList<Users>)

자 NHibernate 설정 : 런타임시

<property name="cache.use_second_level_cache">true</property> 

    <property name="proxyfactory.factory_class"> 
     NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle 
    </property> 

, 함수가 항상 직장은 정말 사용자가 포함 된 경우에도, false를 반환합니다.

디버거/추적을 통해 wp.Users [0] == u (동일한 ID, 동일한 HashCode)를 확인할 수 있습니다. 두 오브젝트 모두 프록시됩니다. Nhibernate 3.1로 업그레이드하기 전에 제대로 작동했습니다.

우리가 이미 다소 문제가 있었기 때문에 지연로드/프록시와 관련이 있다고 확신하지만 형식 비교 (CProxy_User 및 User)와 관련이 있습니다.

+1

구현되어 있는지 확인합니다. 너는 무엇을 기대 하느냐? 무슨 일이야? 문제를 재현하기 위해 독립 실행 형 테스트 케이스를 작성할 수 있습니까? 몇 가지 예를 게시 할 수 있습니까? –

+0

늦어서 죄송합니다. 내 질문에 일부 코드 스 니펫을 추가했습니다. 테스트 케이스로 재현 할 수 없습니다. (내 테스트 컨텍스트에서는 아무것도 프록시 화되지 않습니다.) –

+1

사용자에 대해 Equals 및 GetHashCode를 모두 대체 했습니까? 직장 및 사용자를위한 코드를 게시 할 수 있습니까? –

답변

0

모두 Equals()GetHashCode()가 제대로 나는 당신의 문제를 이해하지 못하는 User

관련 문제