private int AddHashValue(int hashCode, object keyValue) { byte[] bytes = keyValue as byte[]; if (bytes == null) { return(hashCode ^ keyValue.GetHashCode()); } hashCode ^= ByValueEqualityComparer.ComputeBinaryHashCode(bytes); this._containsByteArray = true; return(hashCode); }
internal static bool InternalEquals(EntityKey key1, EntityKey key2, bool compareEntitySets) { if (object.ReferenceEquals((object)key1, (object)key2)) { return(true); } if (object.ReferenceEquals((object)key1, (object)null) || object.ReferenceEquals((object)key2, (object)null) || (object.ReferenceEquals((object)EntityKey.NoEntitySetKey, (object)key1) || object.ReferenceEquals((object)EntityKey.EntityNotValidKey, (object)key1)) || (object.ReferenceEquals((object)EntityKey.NoEntitySetKey, (object)key2) || object.ReferenceEquals((object)EntityKey.EntityNotValidKey, (object)key2) || key1.GetHashCode() != key2.GetHashCode() && compareEntitySets) || key1._containsByteArray != key2._containsByteArray) { return(false); } if (key1._singletonKeyValue != null) { if (key1._containsByteArray) { if (key2._singletonKeyValue == null || !ByValueEqualityComparer.CompareBinaryValues((byte[])key1._singletonKeyValue, (byte[])key2._singletonKeyValue)) { return(false); } } else if (!key1._singletonKeyValue.Equals(key2._singletonKeyValue)) { return(false); } if (!string.Equals(key1._keyNames[0], key2._keyNames[0])) { return(false); } } else { if (key1._compositeKeyValues == null || key2._compositeKeyValues == null || key1._compositeKeyValues.Length != key2._compositeKeyValues.Length) { return(false); } if (key1._containsByteArray) { if (!EntityKey.CompositeValuesWithBinaryEqual(key1, key2)) { return(false); } } else if (!EntityKey.CompositeValuesEqual(key1, key2)) { return(false); } } return(!compareEntitySets || string.Equals(key1._entitySetName, key2._entitySetName) && string.Equals(key1._entityContainerName, key2._entityContainerName)); }