Подтвердить что ты не робот

Невозможно выполнить операции 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. Все ОК, атрибут первичного ключа генерируется правильно

Тем не менее, ни один из подходов не помог. Что за трюк, кто-нибудь знает?

4b9b3361

Ответ 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.

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