Dave Mackey
Dave Mackey

Reputation: 4432

Object's Key Does Not Match the Corresponding Property in the ObjectContext

When I execute this subroutine it throws an error,

"The value of a property that is part of an object's key does not match the corresponding property value stored in the ObjectContext. This can occur if properties that are part of the key return inncosistent or incorrect values or if DetectChanges is not called after changes are made to a property that is part of the key."

Here is the code and below it I've explained briefly what the code does.

  Protected Sub btnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click
    Dim semester As String = ddlwhSemester.SelectedValue
    Dim year As String = txtwhYear.Text
    Dim exists As String = "N"
    Dim pcsemester As String = ddlSemester.SelectedItem.Text
    Dim pcyear As String = ddlYear.SelectedItem.Text
    Using dbContext As pbu_housingEntities = New pbu_housingEntities
        ' Get the list of residents in webHousing.
        Dim qresidents = (From p In dbContext.Residents _
                          Where p.semester = semester _
                          Where p.year = year _
                         Select p.people_code_id)
        Using dbContext2 As Campus6Entities = New Campus6Entities
            ' Get the list of students in PowerCampus.
            Dim qstudents = (From p In dbContext2.RESIDENCies _
                             Where p.ACADEMIC_TERM = pcsemester _
                             Where p.ACADEMIC_YEAR = pcyear _
                             Select p)
            For Each row In qstudents
                exists = "N"
                For Each res In qresidents
                    If row.ToString = res.ToString Then
                        exists = "Y"
                    End If
                Next
                If exists = "Y" Then
                    ' Skip adding.
                Else
                    ' Add a row.
                    ' Get the ID
                    Dim ID As String = row.PEOPLE_ID
                    ' Get info from PowerCampus
                    Dim qstudent = (From p In dbContext2.PEOPLE _
                                    Where p.PEOPLE_ID = ID _
                                    Order By p.CREATE_DATE Descending _
                                    Select p).FirstOrDefault
                    Dim qpeople = (From p In dbContext2.PEOPLE _
                                    Where p.PEOPLE_ID = ID _
                                    Order By p.CREATE_DATE Descending _
                                    Select p).FirstOrDefault
                    Dim people_code_id As String = qpeople.PEOPLE_CODE_ID
                    Dim qacademic = (From p In dbContext2.ACADEMICs _
                                     Where p.PEOPLE_CODE_ID = people_code_id _
                                     Where p.ACADEMIC_TERM = pcsemester _
                                     Where p.ACADEMIC_YEAR = pcyear _
                                     Order By p.CREATE_DATE Descending _
                                     Select p).FirstOrDefault
                    Dim qaddress = (From p In dbContext2.ADDRESSes _
                                    Where p.PEOPLE_ORG_CODE_ID = people_code_id _
                                    Where p.ADDRESS_TYPE = "Perm" _
                                    Order By p.CREATE_DATE Descending _
                                    Select p).FirstOrDefault
                    Dim qdemographics = (From p In dbContext2.DEMOGRAPHICS _
                                         Where p.PEOPLE_CODE_ID = people_code_id _
                                         Order By p.CREATE_DATE Descending _
                                         Select p).FirstOrDefault

                    ' Create the new occupant.
                    Dim newres As New Resident
                    newres.people_code_id = ID
                    newres.person_name = qpeople.FIRST_NAME + " " + qpeople.MIDDLE_NAME + " " + qpeople.LAST_NAME
                    newres.first_name = qpeople.FIRST_NAME
                    newres.last_name = qpeople.LAST_NAME
                    newres.class_level = qacademic.CLASS_LEVEL
                    newres.gender = qdemographics.GENDER
                    newres.semester = semester
                    newres.year = year
                    newres.email = qaddress.EMAIL_ADDRESS
                    dbContext.Residents.AddObject(newres)
                    dbContext.SaveChanges()
                End If
            Next
        End Using
    End Using
End Sub

The above code is used to pull records from a SIS (essentially a higher ed CRM) into my webHousing application (for on-campus residents). It gets a list of everyone who is a student for the select semester/year and then inputs them into the webHousing database if they don't already exist for that semester/year.

Upvotes: 0

Views: 3212

Answers (1)

Dave D
Dave D

Reputation: 691

Looks like your qresidents is an enumeration of integers, while your qstudents is an enumeration of objects of type residents. So this line

 If row.ToString = res.ToString Then
                    exists = "Y"
 End If

Can't compare the the to types. Your second query should be something like:

 Dim qstudents = (From p In dbContext2.RESIDENCies _
                          Where p.ACADEMIC_TERM = pcsemester _
                         Where p.ACADEMIC_YEAR = pcyear _
                         Select p.people_code_id)

Upvotes: 1

Related Questions