20

我想在我的 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* 我很惊讶地看到智能感知告诉我: “请注意,新实体没有添加或附加到集合中”

错误读取:

“违反 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; }
        }
    }
4

2 回答 2

35

我通过以下方式修复了它:

  1. 转到 SQL 并确保表的“身份规范”> 是身份 > 设置为是。如果必须更改数据库,请更新 *.edmx 文件。

  2. 检查 *.edmx > Entity properties > StoreGeneratedPattern 的身份以确保将其设置为Identity

在此处输入图像描述

于 2013-05-02T16:23:03.317 回答
4

EF 文档指出,当为配置有的列插入行时,数据库会生成一个值propConfig.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)

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

换句话说。EF 不会关心newCommentObject.Id插入数据库时​​的值是什么。相反,它将允许数据库生成下一个标识值。

于 2013-04-29T19:21:02.460 回答