C# 使用实体框架5更新数据库字段

C# 使用实体框架5更新数据库字段,c#,winforms,entity-framework,C#,Winforms,Entity Framework,我有一个winforms应用程序,我正在尝试对数据库执行更新。我之所以不调用简单的validate、endedit和update,而是想在password字段上使用一个自定义方法。 我可以添加记录,但不能更新它们 var users = entities.users.AsEnumerable().Where(x => x.Code.Equals(int.Parse(txtUsersCode.Text))).FirstOrDefault(); if (use

我有一个winforms应用程序,我正在尝试对数据库执行更新。我之所以不调用简单的validate、endedit和update,而是想在password字段上使用一个自定义方法。 我可以添加记录,但不能更新它们

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()之前

编辑1:该错误可能是由于您的
Find
查询造成的。在调用
SaveChanges()

var entityKey=entities.users.Create().GetType().GetProperty(“PrimaryKey_ID”).GetValue(userToUpdate)//PrimaryKey_ID是该实体的身份密钥
entities.Entry(entities.Set().Find(entityKey)).CurrentValues.SetValues(userToUpdate);
entities.SaveChanges();

感谢您的快速回复。添加代码后,我现在得到“ObjectStatemanager中已经存在一个具有相同键的对象。ObjectStatemanager无法跟踪具有相同键的多个对象。”@KinyanjuiKamau如果您遇到此错误,请参阅此链接在我的一列中有问题。回答得很好。
entities.Entry(userToUpdate).State = EntityState.Modified;
entities.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();