Невозможно выполнить операции Create, Update или Delete в таблице, поскольку в нем нет первичного ключа
Я пытаюсь вставить строку в таблицу с идентификационным столбцом RequestID (который также является первичным ключом)
HelpdeskLog logEntry = new HelpdeskLog { RequestBody = message.Body };
if (attachment != null)
logEntry.Attachments = Helper.StreamToByteArray(attachment.ContentStream);
Database.HelpdeskLogs.InsertOnSubmit(logEntry);
Но мой код неизбежно вызывает следующую ошибку
Невозможно выполнить операции Create, Update или Delete в таблице, поскольку в нем нет первичного ключа.
несмотря на то, что столбец первичного ключа действительно существует
То, что я пытался сделать:
- Чтобы просмотреть в отладчике значение столбца идентификации, вставленного в объектную модель. Это 0
- Вставить вручную (с SQL) поддельные значения в таблицу - отлично работает, значения идентификаторов, сгенерированные как ожидаемые
- Чтобы гарантировать правильность создания таблицы таблиц SQLMetal. Все ОК, атрибут первичного ключа генерируется правильно
Тем не менее, ни один из подходов не помог. Что за трюк, кто-нибудь знает?
Ответы
Ответ 1
У меня также возникла проблема с моим кодом на С#, и я понял, что забыл обозначение IsPrimaryKey:
[Table (Name = "MySessionEntries" )]
public class SessionEntry
{
[Column(IsPrimaryKey=true)] // <---- like this
public Guid SessionId { get; set; }
[Column]
public Guid UserId { get; set; }
[Column]
public DateTime Created { get; set; }
[Column]
public DateTime LastAccess { get; set; }
}
это необходимо, даже если ваша таблица базы данных (MySessionEntries, в данном случае) уже имеет определенный первичный ключ, так как Linq не находит автоматическое обнаружение этого факта, если вы не использовали инструменты linq2sql, чтобы вытащить определения базы данных в визуальные студия.
Ответ 2
LINQ не позволяет вставлять данные в таблицу без первичного ключа. Чтобы получить данные вставки с таблицей без первичного ключа, вы можете либо использовать процедуру хранилища, либо создать запрос и выполнить с помощью LINQ. Ниже ссылки дают хорошее объяснение того же самого.
Невозможно выполнить операции Create, Update или Delete в таблице (Employee), поскольку у него нет первичного ключа
Ответ 3
Удалите таблицу, а затем снова вставьте ее. Перед тем, как сделать это, вы должны убедиться, что рядом с полем есть маленький маленький ключ. Перекомпилируйте свой проект, и все должно быть в порядке.
Просто потому, что вы обновили dabase, это не означает, что файл DBML как-то автоматически обновляется. Это не так, извините.
Ответ 4
Поскольку таблица имеет первичный ключ в SQL Server, добавьте таблицу в конструктор linq2sql.
Если это не так, вы можете настроить, какие свойства являются частью первичного ключа вручную для конструктора.