【问题标题】:Cannot insert duplicate key in object 'dbo.FeedBack'无法在对象“dbo.FeedBack”中插入重复键
【发布时间】:2016-06-15 21:41:44
【问题描述】:

{"违反 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; }
}

【问题讨论】:

  • 标签看起来不对。这是 c# 而不是 java。我看不到 javascript 或 php 或任何与 android 相关的东西。

标签: c# asp.net-mvc


【解决方案1】:

我认为你需要有你的身份证

 [DatabaseGenerated(DatabaseGeneratedOption.Identity)]

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

【讨论】:

    【解决方案2】:

    要么使用[DatabaseGenerated(DatabaseGeneratedOption.Identity)]自动生成ID,要么自己生成ID(必须唯一)。

    【讨论】:

      【解决方案3】:

      您提供的代码示例没有显示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

      【讨论】:

        猜你喜欢
        • 2021-08-13
        • 2014-05-04
        • 1970-01-01
        • 1970-01-01
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-06
        相关资源
        最近更新 更多