У меня есть приложение (ASP.NET 3.5), которое позволяет пользователям при необходимости перезапускать определенный процесс. Процесс вставляет записи в таблицу MS SQL. У меня есть вставка в Try / Catch и игнорирую улов, если запись уже существует (ошибка в заголовке будет действительной). Это прекрасно работало с использованием ADO, но после того, как я перешел на LINQ, я заметил интересную вещь. Если при повторном запуске процесса уже есть записи в таблице, любые новые записи будут отклонены с той же ошибкой, даже если не было существующей записи.
Код выглядит следующим образом:
Dim ins = New tblOutstandingCompletion
With ins
.ControlID = rec.ControlID
.PersonID = rec.peopleID
.RequiredDate = rec.NextDue
.RiskNumber = 0
.recordType = "PC"
.TreatmentID = 0
End With
Try
ldb.tblOutstandingCompletions.InsertOnSubmit(ins)
ldb.SubmitChanges()
Catch ex As Exception
' An attempt to load a duplicate record will fail
End Try
DataContext для базы данных был установлен во время загрузки страницы.
Я решил проблему, переопределив DataContext перед каждой вставкой:
ldb = New CaRMSDataContext(sessionHandler.connection.ToString)
Dim ins = New tblOutstandingCompletion
Хотя я решил проблему, я хотел бы знать, может ли кто-нибудь объяснить ее. Без переопределения DataContext приложение работает отлично, если нет повторяющихся записей.
С уважением
Джеймс