Asp.net 对象';s键与ObjectContext中的相应属性不匹配

Asp.net 对象';s键与ObjectContext中的相应属性不匹配,asp.net,vb.net,entity-framework,entity-framework-4,Asp.net,Vb.net,Entity Framework,Entity Framework 4,当我执行这个子程序时,它会抛出一个错误 “作为对象键的一部分的属性的值与存储在ObjectContext中的相应属性值不匹配。如果作为键的一部分的属性返回InConsistent或不正确的值,或者在对作为键的一部分的属性进行更改后未调用DetectChanges,则可能会发生这种情况。” 这是代码,下面我简要解释了代码的作用 Protected Sub btnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Cl

当我执行这个子程序时,它会抛出一个错误

“作为对象键的一部分的属性的值与存储在ObjectContext中的相应属性值不匹配。如果作为键的一部分的属性返回InConsistent或不正确的值,或者在对作为键的一部分的属性进行更改后未调用DetectChanges,则可能会发生这种情况。”

这是代码,下面我简要解释了代码的作用

  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

上面的代码用于将记录从SIS(本质上是一个更高级的CRM)拉入我的webHousing应用程序(针对校园居民)。它获取所选学期/年度的所有学生的列表,然后将其输入到webHousing数据库(如果该学期/年度还不存在)。

看起来您的qresidents是一个整数枚举,而QStudens是一个常驻类型的对象枚举。所以这条线

 If row.ToString = res.ToString Then
                    exists = "Y"
 End If
无法与类型进行比较。您的第二个查询应该类似于:

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