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));
 }