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.

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

Ответ 6

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

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

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

Ответ 7

Некоторые таблицы (например, предоставленные поставщиком таблицы) НЕ ИМЕЮТ ПЕРВИЧНЫЙ КЛЮЧ!

В каждом ответе говорится "добавить первичный ключ".

Слушай, я бы не спросил, могу ли я просто добавить его. Условия заданы не мной.

Есть ли способ ПРОСТО ЗАПИСАТЬ. Не требуется чтение, удаление или обновление.