Последовательность LINQ to SQL содержит более одного элемента - PullRequest
3 голосов
/ 07 февраля 2010

При попытке удалить запись из базы данных появляется ошибка.

Вот мой текущий код удаления:

Dim BAToRemove = From i In uDC.BookAuthors _
                       Where i.authorID = intAuthorID _
                       And i.bookID = intBookID _
                       And i.main = "N" _
                       Select i Take (1) Distinct

        If BAToRemove.Any Then
            Dim ba As BookAuthor = BAToRemove.First
            uDC.BookAuthors.DeleteOnSubmit(ba)

            Dim cs As ChangeSet = uDC.GetChangeSet

            uDC.SubmitChanges(ConflictMode.ContinueOnConflict)

            If cs.Deletes.Count = 1 Then
                Return True
            Else
                Return False
            End If
        End If

Это код после возни, чтобы попытаться заставить его работать. Даже без различия .First и Take (1) запрос определенно возвращает только один результат. Я использовал BAToRemove.Count, а также вручную проверил таблицу, и есть только одна подходящая строка.

И BookID, и AuthorID являются первичными ключами.

Я также пытался просто использовать BAToRemove.First прямо в DeleteOnSubmit.

Я также пытался скопировать все элементы возвращенного объекта в новый объект, затем присоединить и удалить, но я получаю сообщение об ошибке, что элемент уже существует (что он делает).

Все остальные посты, которые я основал по этой проблеме, всегда, похоже, являются ошибкой использования SingleOrDefault, который я не использую, поэтому я озадачен этим.

Есть идеи?

1 Ответ

3 голосов
/ 07 февраля 2010

Можете ли вы попробовать позвонить DeleteAllOnSubmit(ba) и проверить, что выполняется в профилировщике SQL-сервера, это должно дать вам представление о том, что происходит не так.

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