public new virtual bool Equals(object obj) { DomainObject <IdT> compareTo = obj as DomainObject <IdT>; return((compareTo != null) && (HasSameNonDefaultIdAs(compareTo) || // Since the IDs aren't the same, either of them must be transient to // compare business value signatures (((IsTransient()) || compareTo.IsTransient()) && HasSameBusinessSignatureAs(compareTo)))); }