DeleteOnSubmit: записи не удалены, исключение не выдано

#linq-to-sql

#linq-to-sql

Вопрос:

Когда я запускаю следующий код:

 Public Function DeleteSessionItem(ByVal thisSessionItem As SessionItem) As Boolean
    Using db As New SEMDBDataContext(My.Settings.SEMDBConnectionString)
        db.DeferredLoadingEnabled = False
        If thisSessionItem.Modified IsNot Nothing Then
            db.Log = Console.Out
            db.SessionItems.Attach(thisSessionItem, True)
            db.SessionItems.DeleteOnSubmit(thisSessionItem)
            Try
                DeleteSessionItem = db.GetChangeSet.Deletes.Count > 0
                db.SubmitChanges()
            Catch ex As Exception
                DeleteSessionItem = False
            End Try
        End If
    End Using
End Function
  

Никаких исключений не выдано, количество удалений в наборе изменений равно 1, а инструкции SQL являются:

 DELETE FROM [dbo].[SessionItems] WHERE ([ItemID] = @p0) AND ([Modified] = @p1)
-- @p0: Input BigInt (Size = 0; Prec = 0; Scale = 0) [61]
-- @p1: Input Timestamp (Size = 8; Prec = 0; Scale = 0) [SqlBinary(8)]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.30729.1

SELECT NULL AS [EMPTY]
FROM [dbo].[SessionItems] AS [t0]
WHERE [t0].[ItemID] = @p0
-- @p0: Input BigInt (Size = 0; Prec = 0; Scale = 0) [61]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.30729.1
  

Тем не менее, запись не удалена из таблицы SessionItems. Это дочерняя таблица (сеансов таблиц), а у SessionItems нет дочерней таблицы.

Есть идеи, почему запись не удаляется?

Ответ №1:

При обновлении файла DBML я, должно быть, случайно перетащил таблицу из предыдущей версии базы данных. Тогда у меня было две строки подключения в списке настроек проекта. Я использовал старую строку подключения в приведенном выше коде. Использование новой строки подключения позволяет работать приведенному выше коду.