VQ.NET LINQ to SQL Удалить все записи - PullRequest
1 голос
/ 06 мая 2010

У меня проблемы с удалением всех записей в таблице с VB.NET. Я использую этот код для удаления всех записей в таблице контактов

        For Each contact In database.Contacts
             database.Contacts.DeleteOnSubmit(contact)
        Next

Но я получаю эту ошибку

Невозможно выполнить создание, обновление или удаление. операции над таблицей (контакт), потому что у него нет первичного ключа.

У кого-нибудь есть предложения?

1 Ответ

5 голосов
/ 06 мая 2010

Вероятно, у вас должен быть первичный ключ на вашем столе. Это значительно облегчит работу с вашим столом. Если у вас нет первичного ключа, попробуйте найти подходящий ключ-кандидат для установки в качестве первичного ключа. Если у вас нет подходящих столбцов, возможно, вы захотите добавить автоматически инкрементный суррогатный ключ (в SQL Server он называется identity ). Если у вас уже есть первичный ключ, убедитесь, что классы LINQ to SQL обновлены.

Однако, если вы просто хотите удалить все значения, вы можете обнаружить, что этот метод слишком медленный. Альтернативой является непосредственное выполнение SQL с использованием DataContext.ExecuteCommand:

database.ExecuteCommand("DELETE Contacts");

Это не требует, чтобы таблица имела первичный ключ. Обратите внимание, что это безвозвратно удалит все строки в вашей таблице, поэтому будьте осторожны. Еще быстрее работает команда TRUNCATE , но учтите, что для этого требуются более широкие права:

database.ExecuteCommand("TRUNCATE TABLE Contacts");

Опять же, будьте осторожны с этой командой. Это удалит все строки из вашей таблицы.

...