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

Ошибка Entity Framework: не удается вставить явное значение для столбца идентификатора в таблице

Я получаю эту ошибку в EF.

Невозможно вставить явное значение для столбца идентификатора в таблице "GroupMembers_New", когда для параметра IDENTITY_INSERT установлено значение OFF.

Столбец на Db является приращением идентичности и в файле дизайна EF, StoreGeneratedPattern равно identity. Кажется, что EF пытается вставить 0 каждый раз, когда я пытаюсь сохранить.

Некоторые предложения говорят, что идентификатор зарезервирован для таблиц или отбрасывает таблицу и перезапускает сценарии.

Любые идеи?

Вот код:

GroupMember groupMember = new GroupMember();
            groupMember.GroupId = group.Id;
            groupMember.UserId = (new UserId(group.Owner));
            //groupMember.Id = _groupContext.GroupMembers.Count();
            group.GroupMembers.Add(groupMember);

            _groupContext.SaveChanges();

database

EF Designer

4b9b3361

Ответ 1

Я столкнулся с этим раньше. Эта ошибка означает, что вы пытаетесь присвоить значение явно столбцу, где база данных автоматически назначает его.

Предложение: Обновите файл edmx, чтобы отразить любые изменения, которые вы могли внести в базу данных. Если база данных автоматически присваивает значение, вы должны увидеть атрибут IsDbGenerated = true в файле вашего дизайнера под этим свойством. Если его нет, вы можете добавить его вручную.

Ответ 2

Попробуйте следующее:

using System.ComponentModel.DataAnnotations.Schema;
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public decimal Identity_Col { get; set; }

Файл класса Entity Framework добавляет эти строки кода в столбец Identity.

Ответ 3

Поместите эти атрибуты поверх свойства, которое является личным:

[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }

Ответ 4

Первый матч в Google, так что вот мое решение:

Сначала код EF: из-за поля "id" PK с автоинкрементом и столбца guid, дизайн выглядит так:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid FileToken { get; set; }

была двойная личность. Я изменил это на:

[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
[DefaultValue("newid()")]
public Guid FileToken { get; set; }

и проблема ушла.

Надеюсь, это поможет вам.

Erik

Ответ 5

В EF 6 для вашей модели есть свойство поля/столбца: StoreGeneratedPattern.

Установите этот параметр в "Идентификатор" в раскрывающемся списке свойств.

(Я не знаю об EF 4. Вышеприведенный ответ, используя IsDbGenerated, кажется, для EF 4.)

И это соответствует в базовом XML атрибуту для элемента:

<Property Name="MyTableId" Type="int" Nullable="false" StoreGeneratedPattern="Identity" />

- но вам не нужно иметь дело с XML вручную, так как вы можете использовать конструктор.

Как это перепуталось, неясно. У меня возникла проблема даже после обновления моей модели из базы данных. Возможно, это запутывается, если вы установите PK на таблицу или измените ее имя после того, как вы уже сгенерировали модель. (Я использую метод table/database-first, а не код в первую очередь.)

Вы не можете использовать вышеприведенный подход для добавления атрибута С# в код сущности, поскольку в этой ситуации код сущности генерируется EF. Предполагается, что EF понимает (само по себе), что поле является тождеством.

Ответ 6

У меня была эта проблема в моем приложении; и получил исправление, изменив свойство "StoredGeneratedPattern" поля id на Identity.

Итак, перейдите к модели; найдите таблицу; нажмите на прокси-серверы первичного ключа; и измените свойство.