We are upgrading an application that was using 3.0.0 with the Castle byte
code provider to 3.3.3, and are having some difficulty with the proxy
implementation of Equals in the new built-in LinFu.DynamicProxy
implementation. For years we have been getting by without implementing
equals/gethashcode, and rely on reference equality for all comparisons.
After upgrading, to 3.3.3 proxies seem to no longer respect reference
equality. See below, which is actual output from a debugging session where
I was looking at interceptions for Equals() calls that were made while
attempting to remove an entity from
a NHibernate.Collection.Generic.PersistentGenericBag:
proxy.GetType().GetMethod("Equals").DeclaringType.FullName
"ActivityProxy"
proxy.GetType().BaseType.FullName
"Domain.Model.Activity"
proxy.GetType().BaseType.GetMethod("Equals").DeclaringType.FullName
"System.Object"
System.Object.ReferenceEquals(proxy, args[0])
true
proxy.Equals(args[0])
false
args[0].Equals(proxy)
false
I don't understand how an instance of a proxy is not equal to itself when
the underlying type has not overridden Equals or GetHashCode... Does
NHibernate now require that you implement your own equality operator??
Mostly I'd like to know if this is a bug or expected behavior.
Thanks in advance,
nick
--
You received this message because you are subscribed to the Google Groups
"nhusers" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/nhusers.
For more options, visit https://groups.google.com/groups/opt_out.