2012-03-23 41 views
0

当我执行这个子程序,它抛出一个错误,对象的密钥不匹配相应的属性中的ObjectContext

“这是一个对象的密钥不匹配相应的属性值的部分属性的值存储在ObjectContext中如果属于该键的属性返回inncosis或不正确的值,或者在对属于该键的属性所做的更改之后未调用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数据库中,如果他们还没有在该学期/年存在的话。

回答

1

看起来你的qresidents是一个整数的枚举,而你的qstudents是一个枚举居民类型的对象。所以这条线

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) 
相关问题