Проблема с LINQ to SQL не обновляет БД - PullRequest
2 голосов
/ 31 августа 2011

Я прочитал посты здесь и не могу найти ответы на эврики, так что вот что у меня есть.Linq to SQl не передает изменения обратно в базу данных.

Вот мой код.Что-нибудь выделяется?Вызов dc.GetChangeSet показывает 0 изменений.Что мне не хватает?Я вижу, что новые значения из "setting" устанавливаются в свойствах объекта cs.SettingID является первичным ключом в моей таблице и отображается как PK в dbml, так что это не проблема.

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 показывает 1 Insert при dc.SubmitChanges это ошибки из-законфликтовать.Он пытается вставить, а не обновлять ...

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

Ответы [ 2 ]

2 голосов
/ 31 августа 2011

Попробуйте удалить код пользовательского класса и просто выберите 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 не работает, потому что он не видит выбранных собственных объектов, регистрирующих изменение.Вы не меняете никаких имен, поэтому нет необходимости указывать явные значения, до которых вы сужаетесь.

0 голосов
/ 31 августа 2011

Может быть, вы пропали без вести

...
dc.ClarifireSetups.InsertOnSubmit( cs )
dc.SubmitChanges()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...