0

C# .NET 3.5 プロジェクトを NH 1.2 から NH 3.1 にアップグレードしようとしています。私は a: で苦労していますmyListOfT.contains(someT)

myListOfTが含まれておりsomeT、そのmyListOfT[0]ようですsomeT(Visual Studio の「スパイ」で確認できます)。ハッシュコードは同じです。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>)

休止状態の構成:

    <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 など) が関係していました。

4

1 に答える 1

0

Equals()との両方GetHashCode()が正しく実装されていることを確認してくださいUser

于 2011-03-21T15:27:18.640 に答える