2011-03-15 58 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

相关问题