Insert new entity to context with identity primary key

c# entity-framework


I want to insert a new record into my SQL table. I tried:

        public void CreateComment(int questionId, string comment)
            QuestionComment questionComment = context.TableName.Create();//1*
            questionComment.propertyThatIsNotAConstraint= questionId;
            questionComment.body = comment;

1* I'm surprised to see intellisense tell me: "Note that the new entity is not added or attached to the set"

Error Reads:

"Violation of PRIMARY KEY constraint 'PK_TableName'. Cannot insert duplicate key in object 'dbo.TableName'. The duplicate key value is (0).\r\nThe statement has been terminated."

The problem is that questionComment has its PK: questionComment.Id defaulted to 0. It needs to be the next available Identity or otherwise not populated and do a "normal" identity insert.

How does entity framework expect me to handle this scenerio?

As Requested:

// <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; }
5/18/2017 6:19:30 PM

Accepted Answer

I fixed it by:

  1. Go to SQL and make sure to the Table has the "Identity Specification" > Is Identity > set to Yes. Then update the *.edmx file if you had to make a DB change.

  2. Check the *.edmx > Entity properties > StoreGeneratedPattern for the identity to ensure that it is set to Identity

enter image description here

5/2/2013 4:23:03 PM

Popular Answer

EF documentation states that the database generates a value when a row is inserted for columns configured with propConfig.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)

In other words. EF won't care what value newCommentObject.Id is when inserting into the database. Instead, it'll allow the database to generate the next identity value.

Related Questions


Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow