как я могу добавить строки в таблицу, если в таблице нет первичного ключа.
Linq Невозможно выполнить операции Create, Update или Delete в "Table (req)", поскольку в нем нет первичного ключа
Ответ 1
Как говорится в заголовке вопроса, LINQ to SQL не может выполнять операции создания, обновления или удаления в таблице без первичного ключа. Это невозможно.
Итак, вам нужно будет использовать DataContext.ExecuteCommand() для выполнения этих действий или, еще лучше, реорганизовать вашу базу данных, чтобы таблицы имеют первичные ключи.
Ответ 2
У меня тоже была проблема. Но я решил эту проблему...
1.Настройте первичный ключ для таблицы в проводнике сервера (вы можете проверить его в определении открытой таблицы, щелкнув правой кнопкой мыши по таблице)
2.open dataclasses.dbml в папке App_Code
3. Удалить существующую таблицу
4. Удалите ту же таблицу после повторной установки основной клавиши.
5. Сохраните все изменения (система предложит сохранить изменения в файле .dbml → нажмите "Да" )
6. снова запустите приложение
он будет работать
Ответ 3
Позвольте мне проиллюстрировать пример:
SampleDataContextDataContext db = new SampleDataContextDataContext();
Employee emp = new Employee() {
FirstName = "Experts",
Lastname = "Comment",
Address = "[email protected]"
};
db.Employees.InsertOnSubmit(emp);
db.SubmitChanges();
Приведенный выше код выдавал ту же ошибку при попытке вставить новую строку. Причина этой проблемы заключается в том, что LINQ не предоставляет возможности для вставки данных в таблицу без первичного ключа. На этом этапе у вас есть два варианта, которые вы можете использовать для выполнения операции вставки.
1.Создайте процедуру хранения и вызовите ее из LINQ.
SampleDataContextDataContext db = new SampleDataContextDataContext();
db.InsertEmployeeData("Experts","Comment", "[email protected]");
Здесь я создал хранимую процедуру с именем InsertEmployeeData
и вызвал ее из кода. Простой и прямой.
2.Создайте инструкцию insert и выполните с помощью LINQ.
SampleDataContextDataContext db = new SampleDataContextDataContext();
string insertStatement = "Insert into Employee values('Experts', 'Comment','[email protected]')";
db.ExecuteQuery<Employee>(insertStatement);
Здесь я создал обычный запрос вставки и выполнил его с помощью метода LINQ ExecuteQuery
.
Ответ 4
Если вы не можете установить его в db, установите первичный ключ в конструкторе linq2sql.
Если нет подмножества столбцов, которые могут использоваться в качестве первичного ключа, отметьте их как часть первичного ключа.
Ответ 5
Я не знаю, очевидно ли это, но, возможно, вы можете установить первичный ключ. http://www.functionx.com/vb/adonet/primarykey.htm
также см. http://www.i-think22.net/archives/2009/07/24/linq-to-sql-and-tables-with-no-primary-key/
Ответ 6
Возможно, я ошибаюсь, так как у меня нет возможности проверить прямо сейчас, но я считаю, что вы можете сказать Linq to Sql, что поле является первичным ключом, даже если оно на самом деле не одно в базе данных. Это предполагает, что данные в поле фактически уникальны и могут использоваться как ключ, даже если он не определен как один.
Если таблица не имеет первичного ключа, но содержит уникальные данные, которые можно использовать в качестве ключа, тогда сообщите L2S в dbml, что это первичный ключ.
Если таблица не содержит уникальных данных, которые могут использоваться в качестве ключа, тогда вам нужно написать sproc, который удаляет данные, которые вы хотите удалить.
Ответ 7
Некоторые таблицы (например, предоставленные поставщиком таблицы) НЕ ИМЕЮТ ПЕРВИЧНЫЙ КЛЮЧ!
В каждом ответе говорится "добавить первичный ключ".
Слушай, я бы не спросил, могу ли я просто добавить его. Условия заданы не мной.
Есть ли способ ПРОСТО ЗАПИСАТЬ. Не требуется чтение, удаление или обновление.