属性 id是对象关键信息的一部分,不可修改

the property id is part of the object's key information and cannot be modified

当我尝试使用 EF 更新数据时出现类似

的错误

the property id is part of the object's key information and cannot be modified

这是 wınForm 应用程序 你可以在这里看到我的更新方法

区域更新

        try
        {
            _truck.plateNumber= txtplateNumber.Text;
            _truck.brand = txtMarka.Text;
            _truck.model = txtModel.Text;
            _truck.type = txtTipi.Text;
            _truck.registrationDate = dtregistrationDate.Value;
            _truck.examinationDate = dtexaminationDate.Value;
            _truck.Description = txtDescription.Text;
            _truck.driverName = txtdriverName.Text;
            _truck.weight= txtweight.Text;
            _truck.Id = Convert.ToInt32(txtplateNumber.Tag);
            _truck.userId = Tools.Tools.getUserId();

            #region update
            currentItem = cr.getbyId(Convert.ToInt32(txtplateNumber.Tag.ToString())).plateNumber;

            if (currentItem != null)
            {
                if (!currentItem.Equals(txtplateNumber.Text))
                {
                    if (!cr.isPlateAlreadyExist(txtplateNumber.Text))
                    {
                       DialogResult result = MessageBox.Show("Are you sure want to update to Truck?", "Update", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                        if (result == DialogResult.Yes)
                        {
                            if (!string.IsNullOrEmpty(this.pbLicence.ImageLocation))
                            {
                                _truck.licencePicture = Tools.Tools.convertToByteFfromImageF(pbLicence.Image);

                                if (!cr.getbyId(Convert.ToInt32(txtplateNumber.Tag)).hasPicture)
                                {
                                    _truck.hasPicture = true;
                                    cr.Update(_truck);
                                }
                            }

                            cr.Update(_truck);
                            MessageBox.Show("Successfuly");

                        }
                        else
                        {
                            MessageBox.Show("The process was Cancel !", "Canceled", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                    }
                    else
                    {
                        MessageBox.Show("The plate number is already Exists.", "Same Plate Number", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                    }
                }
                else
                {
                    DialogResult result = MessageBox.Show("Are you sure want to update to Truck?", "Update", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (result == DialogResult.Yes)
                    {
                        if (!string.IsNullOrEmpty(this.pbLicence.ImageLocation))
                        {
                            _truck.licencePicture = Tools.Tools.convertToByteFfromImageF(this.pbLicence.Image);

                            if (!cr.getbyId(Convert.ToInt32(txtplateNumber.Tag)).hasPicture)
                            {
                                _truck.hasPicture = true;
                                cr.Update(_truck);
                            }
                        }

                        cr.Update(_truck);
                        MessageBox.Show("SuccessFully");
                    }

                }
            #endregion
            }
            else
            {
                MessageBox.Show("You did not select an Item","Warning");
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error:" + ex.Message, "Error");
        }
        finally
        {
            getUpdatedList();
            Tools.Tools.clearAllFormControlsContent(pickTruckControls());
        }
        #endregion

------版本库更新方法----------

public int Update(Truck item)
    {
        Truck updated = db.Trucks.Where(x => x.Id == item.Id).FirstOrDefault();
        db.Entry(updated).CurrentValues.SetValues(item);
        return db.SaveChanges();
    }

您收到的错误消息是准确的——您正在设置 _truck.Id 属性,按照惯例,它是 Entity Framework 使用的主要 key/identity 字段.如果您使用的是 EF Code First,您可能只想将另一个字段添加到您的数据库和数据模型中,以保存 txtplateNumber.Tag 值。无论哪种方式,您都需要删除将该值设置为 _truck.Id.

的代码