Problem with custom Equality in Entity Framework
        Posted  
        
            by Shimmy
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Shimmy
        
        
        
        Published on 2010-04-13T02:08:42Z
        Indexed on 
            2010/04/13
            2:12 UTC
        
        
        Read the original article
        Hit count: 790
        
Hello!
I am using Entity Framework in my application.
I implemented with the partial class of an entity the IEquatable<T> interface:
Partial Class Address : Implements IEquatable(Of Address) 'Other part generated
  Public Overloads Function Equals(ByVal other As Address) As Boolean _
      Implements System.IEquatable(Of Address).Equals
    If ReferenceEquals(Me, other) Then Return True
    Return AddressId = other.AddressId
  End Function
  Public Overrides Function Equals(ByVal obj As Object) As Boolean
    If obj Is Nothing Then Return MyBase.Equals(obj)
    If TypeOf obj Is Address Then 
      Return Equals(DirectCast(obj, Address)) 
  Else
    Return False
  End Function
  Public Overrides Function GetHashCode() As Integer
    Return AddressId.GetHashCode
  End Function
End Class
Now in my code I use it this way:
Sub Main()
  Using e As New CompleteKitchenEntities
    Dim job = e.Job.FirstOrDefault
    Dim address As New Address()
    job.Addresses.Add(address)
    Dim contains1 = job.Addresses.Contains(address) 'True
    e.SaveChanges()
    Dim contains2 = job.Addresses.Contains(address) 'False
    'The problem is that I can't remove it:
    Dim removed = job.Addresses.Remoeve(address) 'False
  End Using
End Sub
Note (I checked in the debugger visualizer) that the EntityCollection class stores its entities in HashSet so it has to do with the GetHashCode function, I want it to depend on the ID so entities are compared by their IDs.
Please help me find what's wrong in the GetHashCode function (by ID) and what can I change to make it work.
Thanks a lot.
© Stack Overflow or respective owner