Reputation: 4432
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
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