簡體   English   中英

DbUpdateException Whiles 使用 LINQ 將記錄更新到數據庫

[英]DbUpdateException Whiles updating record using LINQ to Database

我一直在嘗試以 window 形式更新數據庫中的記錄,但每次單擊更新按鈕時都會出現此錯誤。

System.Data.Entity.Infrastructure.DbUpdateException: '更新條目時出錯。 有關詳細信息,請參閱內部異常。 SqlException:違反主鍵約束“PK_ad_gb_rsm”。 無法在 object 'dbo.ad_gb_rsm' 中插入重復鍵。 重復鍵值為 (100001)。 該語句已終止。

下面是我正在使用的 LINQ 代碼

private void btu_Update_Click(object sender, EventArgs e)
{
    if (radioButtonMale.Checked)
    {
        gender = "male";
    }
    else if (radioButtonFemale.Checked)
    {
        gender = "female";
    }
    userID = Convert.ToDecimal(txtUserID.Text);
   
    //ad_gb_rsm acc = DBS.ad_gb_rsm.First(s => s.ICube_id.Equals(userID));

    var query = (from upd in DBS.ad_gb_rsm where upd.ICube_id == userID select upd).ToList();
    foreach (var acc in query)
    {
        acc.user_type = comboBoxUser_Type.Text;
        acc.JDate = dateTimeCrtDate.Text;
        acc.title = comboBoxTitle.Text;
        acc.fName = txtFname.Text;
        acc.mName = txtMName.Text;
        acc.lName = txtLName.Text;
        acc.DOB = dateTimeDOB.Value.ToString();
        acc.Gender = gender;
        acc.Phone = txtPhoneNumber.Text;
        acc.zip_code = txtZipCode.Text;
        acc.POB = txtPOBAddress.Text;
        acc.address = txtAddress.Text;
        acc.email = txtEmail.Text;
        acc.City = txtCity.Text;
        acc.State = txtState.Text;
        acc.marrital_Status = comboBoxMS.Text;
        acc.NOK_Name = txtNKName.Text;
        acc.NOK_Phone = txtNKNumber.Text;
        acc.NOK_Address = txtNOKAddress.Text;
        acc.NOKRela = txtNOKRela.Text;
        acc.create_dt = dateTimeCrtDate.Value.ToString();

        Image img = LogUserImage.Image;
        if (img.RawFormat != null)
        {
            if (ms != null)
            {
                img.Save(ms, img.RawFormat);
                acc.Picture = ms.ToArray();
            }
        }
        acc.Dept_Sector = comboBoxDeptSector.Text;
        acc.Position = comboBoxPosition.Text;
        acc.JDate = dateTimeJoinDt.Value.ToString();
        acc.Empl_Status = comboBoxUserStatus.Text;
        acc.username = txtUsername.Text;
        acc.password = txtPassword.Text;
        acc.incu_copany_name = txtIncu_CompanyName.Text;
        acc.createdBy = AdministratorBankLogin.AdminUserLogin.Username;
        try
        {
            DBS.ad_gb_rsm.Add(acc);
            DBS.SaveChanges();
            MessageBox.Show("User Created Successfully");
        }
        catch (Exception exception)
        {
            Console.WriteLine(exception);
            throw;
        }
    }
}

我不知道我做錯了什么。 我是新來的。

內部異常說明了一切:

SqlException:違反主鍵約束“PK_ad_gb_rsm”。 無法在 object 'dbo.ad_gb_rsm' 中插入重復鍵。 重復鍵值為 (100001)

您的代碼嘗試執行INSERT操作,但失敗了,因為它違反了主鍵的唯一約束。

您的問題的根本原因是以下行:

DBS.ad_gb_rsm.Add(acc);

由於Add調用,您的acc實體的state變為Added而不是Modified 如果您刪除該Add方法調用,那么它將將該實體視為已Modified並執行UPDATE操作。

如果此更改跟蹤概念對您來說是新概念,請閱讀此 MDSN 文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM