2010-07-26 2 views
1

У меня есть таблица, в которой я не хочу указывать какой-либо первичный ключ, после чего я вставляю записи в него с помощью Linq ... aahhh ... его выдача ошибки «Невозможно выполнить операции« Создать, обновить или удалить »в« Таблице (abc) », поскольку он не имеет первичного ключа»Как вставить данные в таблицу sql с помощью Linq без установки первичного ключа в таблице

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

+2

Я не вижу проблемы с созданием первичного ключа. Похоже на очевидное решение для меня. –

+0

просто введите целочисленное поле с автоматическим приращением и установите его в первичный ключ. –

+0

Дэн .. есть запись о слежении за машиной за каждую секунду n mili second ... dats y im say ... – Tami

ответ

1

Вы не можете использовать Linq-to-SQL напрямую с таблицами, у которых нет первичных ключей, потому что они не поддерживаются.

Если вы беспокоитесь об эффективности индексации, то вы можете добавить хранимую процедуру, которая вставляет и добавляет ее в контекст данных. Это немного больше работы, и на самом деле это не Linq-to-SQL, это просто метод, который вы вызываете в контексте данных.

В любом случае, вероятно, не будет заметного повышения производительности в поле первичного ключа идентификации.

+0

thanx Bennor ... dats d правильное решение, я думаю ... – Tami

0

Tami - не было бы хорошей идеей придерживаться «лучших практик» при использовании linq и добавлять первичный ключ autonumber, даже если он не будет использоваться иначе, чем для вставок или обновлений? я могу думать о многих случаях, когда кажущееся «не требуется» для первичного ключа позже приводит к проблемам при попытке обновления на другие платформы и т. д.

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

Джима

[править] Тами - я буду честен с вами. вам, возможно, придется исследовать соглашения, чтобы наилучшим образом удовлетворить любой ответ на этот вопрос. в основном, несмотря на то, что вам не нужен индекс для ваших записей, поскольку он не редактируется и не удаляется, соглашение с linq основано на предположении целостности данных. по сути, linq (и многие другие программные инструменты) требуют соглашения, которое позволяет им кратко идентифицировать уникальный ключ для каждого объекта, который они вносят в область видимости. не определяя это, вы обходите это соглашение, и поэтому linq отмечает это для вас. единственный путь, который должен пройти с потоком. даже если вы чувствуете, что индекс избыточен, linq требует, чтобы он позволял вам получить доступ к полным функциям, встроенным в него.

+0

thanx для ответа Джим ... его таблица только для отслеживания записи транспортного средства каждой секунды..и я dnt wana update n удалить запись ani в ней ... ее только для вставки. – Tami

+0

так что «ломается», если вы добавляете столбец PK? –

Смежные вопросы