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

Вставьте новый объект в контекст с первичным ключом идентификации

Я хочу вставить новую запись в таблицу SQL. Я пробовал:

        public void CreateComment(int questionId, string comment)
        {
            QuestionComment questionComment = context.TableName.Create();//1*
            questionComment.propertyThatIsNotAConstraint= questionId;
            questionComment.body = comment;
            context.QuestionComments.Add(questionComment);
            context.SaveChanges();//ERROR...
        }

1 * Я удивлен, увидев, что intellisense говорит мне: "Обратите внимание, что новый объект не добавляется или не привязан к набору"

Ошибка чтения:

"Нарушение ограничения PRIMARY KEY" PK_TableName ". Невозможно вставить дублировать ключ в объекте 'dbo.TableName'. Значение повторяющегося ключа (0).\R\nПриложение завершено.

Проблема в том, что questionComment имеет свой PK: questionComment.Id по умолчанию 0. Это должен быть следующий доступный идентификатор или иначе не заполненный и сделать "нормальную" идентификационную вставку.

Как инфраструктура сущности ожидает, что я обработаю этот сценарий?

Как запрошено:

//------------------------------------------------------------------------------
// <auto-generated>
//    This code was generated from a template.
//
//    Manual changes to this file may cause unexpected behavior in your application.
//    Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

    namespace Feedback.Models
    {
        using System;
        using System.Collections.Generic;

        public partial class QuestionComment
        {
            public int id { get; set; }
            public int questionId { get; set; }
            public string body { get; set; }
            public int commentIndex { get; set; }
        }
    }
4b9b3361

Ответ 1

Я исправил его:

  • Перейдите к SQL и убедитесь, что в таблице установлено значение "Идентификация" > "Идентичность" > "Да". Затем обновите файл *.edmx, если вам нужно внести изменения в БД.

  • Проверьте свойства *.edmx > Entity > StoreGeneratedPattern для идентификации, чтобы убедиться, что для него установлено значение Идентификация

enter image description here

Ответ 2

Документация EF гласит, что база данных генерирует значение, когда строка вставлена ​​для столбцов, настроенных с помощью propConfig.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)

http://msdn.microsoft.com/en-us/library/hh829109(v=vs.103).aspx

Иными словами. EF не волнует, какое значение newCommentObject.Id при вставке в базу данных. Вместо этого он позволит базе данных генерировать следующее значение идентификации.