2011-03-15 45 views
0

我試圖升級C#.NET 3.5的項目從NH 1.2至3.1 NH。我有一個很難有:myListOfT.contains(someT)NHibernate的3和城堡代理:myList.Contains壞

myListOfT包含someT,並myListOfT[0]似乎是someT(我可以使用Visual Studio的 「間諜」 看到它)。 HashCodes是相同的。 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和用戶爲例)。

+1

我不明白您的問題來實現。你能指望什麼?怎麼了?你能寫一個獨立的測試用例來重現這個問題嗎?你可以發表一些例子嗎? – 2011-03-15 18:52:01

+0

對不起,我遲到的回答。我在我的問題中添加了一些代碼片段。我無法與測試案例重現它(沒有什麼是在我的測試方面:(proxified) – 2011-03-21 09:37:57

+1

你會覆蓋的Equals和GetHashCode的用戶,您可以張貼代碼在工作場所和用戶 – 2011-03-21 12:28:37

回答

0

確保兩個Equals()GetHashCode()正確的User

相關問題