使用实体框架更新数据库字段
本文关键字:数据库 字段 更新 框架 实体 | 更新日期: 2023-09-27 17:51:08
我有这个winforms应用程序,我试图执行更新数据库。之所以这样做,而不是调用简单的validate、endedit和update,是因为我想在密码字段上使用自定义方法。我可以添加记录,但不能更新它们。
var users = entities.users.AsEnumerable().Where(x => x.Code.Equals(int.Parse(txtUsersCode.Text))).FirstOrDefault();
if (users == null)
{
user userToAdd = new user
{
firstName = txtUsersFName.Text,
lastName = txtUsersLName.Text,
username = txtUsersUName.Text,
password = GlobalClass.HashEncrypt(txtUsersPassword.Text),
created = DateTime.Now,
companyAllocated = companyAllocatedComboBox.Text
};
entities.users.Add(userToAdd);
entities.SaveChanges();
this.usersTableAdapter.Fill(this.eko_payrollDataSet.users);
}
else
{
using (eko_payroll_enterpriseEntities ctx = new eko_payroll_enterpriseEntities())
{
var userToUpdate = ctx.users.Find(users.Code);
if (userToUpdate != null)
{
//entities.Configuration.ValidateOnSaveEnabled = false;
userToUpdate.firstName = txtUsersFName.Text;
userToUpdate.lastName = txtUsersLName.Text;
userToUpdate.username = txtUsersUName.Text;
userToUpdate.password = GlobalClass.HashEncrypt(txtUsersPassword.Text);
userToUpdate.modified = DateTime.Now;
userToUpdate.companyAllocated = companyAllocatedComboBox.Text;
entities.SaveChanges();
}
}
}
MessageBox.Show("User details updated successfully");
没有抛出错误,但更改/更新的字段没有反映在数据库上。也就是说,更新时什么也没发生。
如何解决这个问题?
这并没有多大帮助。我如何用实体框架从实体更新单个字段?
将此添加到entities.SaveChanges();
entities.Entry(userToUpdate).State = EntityState.Modified;
entities.SaveChanges();
编辑1:这个错误可能是由于您的Find
查询。您可以在调用SaveChanges()
var entityKey = entities.users.Create().GetType().GetProperty("PrimaryKey_ID").GetValue(userToUpdate); //PrimaryKey_ID is your Identity key of that entity
entities.Entry(entities.Set<users>().Find(entityKey)).CurrentValues.SetValues(userToUpdate);
entities.SaveChanges();