当我尝试使用EF更新数据时,我得到了错误
属性id是对象的关键信息的一部分,不能 改性
Thısıswı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();
}
答案 0 :(得分:1)
您获得的错误消息是准确的 - 您正在设置_truck.Id属性,按照惯例,该属性是Entity Framework使用的主键/标识字段。您可能只想在数据库中添加另一个字段,如果使用EF Code First,则可以添加到数据模型中,以保存txtplateNumber.Tag值。无论哪种方式,您都需要删除该值为_truck.Id的代码设置。