我試圖升級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和用戶爲例)。
我不明白您的問題來實現。你能指望什麼?怎麼了?你能寫一個獨立的測試用例來重現這個問題嗎?你可以發表一些例子嗎? – 2011-03-15 18:52:01
對不起,我遲到的回答。我在我的問題中添加了一些代碼片段。我無法與測試案例重現它(沒有什麼是在我的測試方面:(proxified) – 2011-03-21 09:37:57
你會覆蓋的Equals和GetHashCode的用戶,您可以張貼代碼在工作場所和用戶 – 2011-03-21 12:28:37