无法在对象'dbo.FeedBack'中插入重复键

时间:2016-06-15 11:53:58

标签: c# asp.net-mvc

  

{“违反PRIMARY KEY约束'PK_FeedBack'。无法插入   对象'dbo.FeedBack'中的重复键。重复的键值是   (0)。\ r \ n声明已经终止。“}

public int InsertFeedBack(FeedBack fb)
    {
        db.FeedBacks.Add(fb);
        db.SaveChanges();

        return fb.ID;
    }

public JsonResult Send(string name, string mobile, string address, string email, string content)
    {
        var feedback = new FeedBack();
        feedback.Name = name;
        feedback.Email = email;
        feedback.CreatDate = DateTime.Now;
        feedback.Phone = mobile;
        feedback.Content = content;
        feedback.Address = address;

        var id = new LHeDAO().InsertFeedBack(feedback);
        if (id > 0)
        {
            return Json(new
            {
                status = true
            });
            //send mail
        }

        else
            return Json(new
            {
                status = false
            });
    }

public partial class FeedBack
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int ID { get; set; }

    [Required]
    [StringLength(50)]
    public string Name { get; set; }

    [Required]
    [StringLength(50)]
    public string Phone { get; set; }

    [Required]
    [StringLength(50)]
    public string Email { get; set; }

    [Required]
    [StringLength(50)]
    public string Address { get; set; }

    [Required]
    [StringLength(50)]
    public string Content { get; set; }

    public DateTime? CreatDate { get; set; }

    public bool? status { get; set; }
}

3 个答案:

答案 0 :(得分:5)

我认为你的身份证需要

 [DatabaseGenerated(DatabaseGeneratedOption.Identity)]

并确保将ID设置为数据库中的标识列。

答案 1 :(得分:0)

使用[DatabaseGenerated(DatabaseGeneratedOption.Identity)]自动生成ID或自己生成ID(必须是唯一的)。

答案 2 :(得分:0)

您提供的代码示例未显示ID的任何初始化:

    var feedback = new FeedBack();
    feedback.Name = name;
    feedback.Email = email;
    feedback.CreatDate = DateTime.Now;
    feedback.Phone = mobile;
    feedback.Content = content;
    feedback.Address = address;

    var id = new LHeDAO().InsertFeedBack(feedback);**

并明确声明数据库不应生成它:

[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int ID { get; set; }

所以ID默认初始化为0,并且数据库在尝试插入时返回该错误,因为在ID为0的表中已经有一行。要修复此问题,在尝试执行插入操作之前,您需要允许数据库生成ID的值或使用唯一值初始化ID