Vb.net LINQ to SQL不更新数据库时出现问题

Vb.net LINQ to SQL不更新数据库时出现问题,vb.net,asp.net-mvc-3,linq-to-sql,.net-4.0,Vb.net,Asp.net Mvc 3,Linq To Sql,.net 4.0,我已经通读了这里的帖子,找不到任何尤里卡的答案,所以这里是我的答案。 Linq到SQl不将更改传播回数据库 这是我的密码。有什么突出的地方吗? 对dc.GetChangeSet的调用显示0个更改。 我错过了什么?我可以看到“设置”中的新值被设置为cs对象属性。SettingID是我表中的主键,在dbml中显示为PK,所以这不是问题 Public Shared Function Update(ByVal setting As ClarifireSetup) As Boolean Dim

我已经通读了这里的帖子,找不到任何尤里卡的答案,所以这里是我的答案。 Linq到SQl不将更改传播回数据库

这是我的密码。有什么突出的地方吗? 对dc.GetChangeSet的调用显示0个更改。 我错过了什么?我可以看到“设置”中的新值被设置为cs对象属性。SettingID是我表中的主键,在dbml中显示为PK,所以这不是问题

Public Shared Function Update(ByVal setting As ClarifireSetup) As Boolean

    Dim cs As ClarifireSetup

    Try
        Using dc As New AdminClarifireSetupDataContext(TripleDESSecurity.Decrypt(SharedData.PortalCnx))
            cs = (From d In dc.AdminClarifireSetups
                  Where d.SettingID = setting.SettingID
                  Select New ClarifireSetup With {
                    .SettingID = d.SettingID,
                    .SettingKey = d.SettingKey,
                    .SettingValue = d.SettingValue,
                    .FriendlyName = d.FriendlyName,
                    .DisplayOrder = d.DisplayOrder
               }).FirstOrDefault()

            If cs IsNot Nothing Then
                cs.SettingID = setting.SettingID
                cs.SettingKey = setting.SettingKey
                cs.SettingValue = setting.SettingValue
                cs.FriendlyName = setting.FriendlyName
                cs.DisplayOrder = setting.DisplayOrder
                dc.GetChangeSet()
                dc.SubmitChanges()
            End If
        End Using

        Return True

    Catch ex As Exception
        Throw
    Finally
        If Not cs Is Nothing Then
            cs.Dispose()
            cs = Nothing
        End If
    End Try

End Function
编辑: 将我的代码更改为此,InsertOnSubmit在dc时显示1个插入。SubmitChanges由于cconflict而导致错误。它正在尝试插入,而不是更新

Public Shared Function Update(ByVal setting As ClarifireSetup) As Boolean

    Dim cs As AdminClarifireSetup

    Try
        Using dc As New AdminClarifireSetupDataContext(TripleDESSecurity.Decrypt(SharedData.PortalCnx))
            'cs = (From d In dc.AdminClarifireSetups
            '      Where d.SettingID = setting.SettingID
            '      Select New AdminClarifireSetup With {
            '        .SettingID = d.SettingID,
            '        .SettingKey = d.SettingKey,
            '        .SettingValue = d.SettingValue,
            '        .FriendlyName = d.FriendlyName,
            '        .DisplayOrder = d.DisplayOrder
            '   }).FirstOrDefault()
            cs = New AdminClarifireSetup

            If cs IsNot Nothing Then
                cs.SettingID = setting.SettingID
                cs.SettingKey = setting.SettingKey
                cs.SettingValue = setting.SettingValue
                cs.FriendlyName = setting.FriendlyName
                cs.DisplayOrder = setting.DisplayOrder
                dc.SubmitChanges()
            End If
        End Using

        Return True

    Catch ex As Exception
        Throw
    Finally
        If Not cs Is Nothing Then
            cs = Nothing
        End If
    End Try

End Function

是不是你失踪了

...
dc.ClarifireSetups.InsertOnSubmit( cs )
dc.SubmitChanges()

尝试删除自定义类代码,只需选择d

Dim cs as AdminClarifireSetup ' This looks like the actual object type

Try
        Using dc As New AdminClarifireSetupDataContext(TripleDESSecurity.Decrypt(SharedData.PortalCnx))
            cs = (From d In dc.AdminClarifireSetups
                  Where d.SettingID = setting.SettingID
                  Select d).Single()

            If cs IsNot Nothing Then
                cs.SettingID = setting.SettingID
                cs.SettingKey = setting.SettingKey
                cs.SettingValue = setting.SettingValue
                cs.FriendlyName = setting.FriendlyName
                cs.DisplayOrder = setting.DisplayOrder
                dc.GetChangeSet()
                dc.SubmitChanges()
            End If
        End Using

我的想法是GetChangeSet失败了,因为它没有看到任何正在注册更改的本机对象。您没有更改任何名称,因此无需指定要缩小范围的显式值。

有时只是重新创建DBML会有帮助。不,从头开始重新创建DBML没有帮助。仍在GetChangeSetdc.Ups中显示0项。。。不高兴该表名为AdminDiclareSetUps,我的类名为DiclareSetUp,因此dc.DiclareSetUp不工作,因为它不是表。InsertOnSubmit需要表的实体作为参数,而不是类objectInsertOnSubmit失败,它正在尝试插入,而不是更新。。请参阅上面编辑的代码哦,好的,我以为您是在尝试从AdminClearResetUps复制到ClearResetUps,因为您从中选择时使用了new:)我是按照Telerik支持部门的指示使用原始代码的。。。但是它显然不起作用。AdminUp类型只是.dbml文件中单个表的定义。我的自定义类已启动。但是它看起来需要一个对象AdminUp,即实际的表对象,以便将提交更改传播回db