2013-07-17 126 views
1

我试图用LINQ更新SQL表。它不断尝试更新表中的第一条记录。如果我选择第一条记录,它将成功更新该记录,但如果我尝试更新任何其他记录,则表示我正在尝试更改PK的CategoryID,因此它不会更改它。
我已经尝试了几个变化,没有运气。VB LINQ to SQL更新

Imports System.Data.Linq 
Public Class frmUpdate 
Dim db As New DataClasses1DataContext 
Dim catnum As Integer 
Private Sub frmUpdate_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
    Dim query = From aCat In db.Categories 
       Select aCat 

    CategoryBindingSource.DataSource = query 
End Sub 

Private Sub btnUpdate_Click_1(sender As System.Object, e As System.EventArgs) Handles btnUpdate.Click 
    Try 
     catnum = CInt(CategoryIDComboBox.Text()) 
     Dim catQuery As Category = (From aCat In db.Categories 
        Where aCat.CategoryID = catnum 
        Select aCat).First() 

     catQuery.CategoryID = catnum 
     catQuery.CategoryName = CategoryNameTextBox.Text.ToString() 
     catQuery.Description = DescriptionTextBox.Text.ToString() 

     db.SubmitChanges() 
     frmGridView.ShowDialog() 
    Catch ex As Exception 
     MessageBox.Show(ex.Message) 
    End Try 

End Sub 
End Class 
+0

看来您正在将categoryId设置为组合框。假设这是WPF或Winforms,你可能会遇到数据绑定问题。既然你持久化了上下文,你应该只能依靠数据绑定来更新你的值,然后调用db.SubmitChanges来应用更改,而无需在代码中手动设置值。了解组合框如何与您的表单相关以提供更明智的响应可能会有帮助。 –

回答

0

您必须将其清除

catQuery.CategoryID = catnum 

对象已经具有价值,因为这是你如何找到它。显然,为它分配相同的值被视为一个变化。

+0

我试过这个,没有这条线。双向同样的错误信息。 –

+0

看起来不可能与您的代码。什么是确切的例外? (和内部例外,如果有的话)。 “类别”本身有任何添加的代码? –

+0

'Category'类型的对象的成员'CategoryID'的值已更改/定义对象身份的成员无法更改。考虑添加一个具有新身份的新对象,并删除现有的对象。 –