#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 я, должно быть, случайно перетащил таблицу из предыдущей версии базы данных. Тогда у меня было две строки подключения в списке настроек проекта. Я использовал старую строку подключения в приведенном выше коде. Использование новой строки подключения позволяет работать приведенному выше коду.