上下文SaveChanges()不起作用

本文关键字:不起作用 SaveChanges 上下文 | 更新日期: 2023-09-27 18:28:27

当我单击表单中的按钮时,会创建一个新成员。此具有属性的新成员作为参数传递给数据库类UpdateMember方法。

在UpdateMember方法中,搜索具有相同id的成员,然后用参数中传递的成员替换该位置的成员。

现在的问题是,现在更新了成员列表,但更新了上下文。SaveChanges不同意我的观点(它不会更新数据库)。

这是表单中的代码:db是db类的一个实例

 private void updateMember()
    {
        Member mbr = new Member();
        mbr.membernr = int.Parse(nr.Text);
        mbr.firstname = fName.Text;
        mbr.lastname = lName.Text;
        mbr.birthdate = Convert.ToDateTime(bDay.Text);
        mbr.gender = gender.Text;
        mbr.paid = int.Parse(paid.Text);
        db.UpdateMember(mbr);
    }

这是数据库类

class Db
{
    private SportDBEntities context;
    private static Db db;
    private List<Member> members;
    private Db() {
        context = new SportDBEntities();
    }
    public static Db GetInstance() {
        if (db == null) {
            db = new Db();
        }
        return db;
    }
    public List<Member> GetMembers() {
        members = new List<Member>();
        GetMembersFromDb();
        return members;
    }
    private void GetMembersFromDb() {
        var query = context.Members;
        foreach (Member m in query) {
            members.Add(m);
        }
    }
    public Member GetMemberAt(int index)
    {
        return members[index];
    }
    public void UpdateMember(Member mbr)
    {
        for (int i = 0; i < members.Count; i++)
        {
            if (members[i].membernr==mbr.membernr) {
                members[i] = mbr;
            }
        }
        context.SaveChanges();
    }
}

上下文SaveChanges()不起作用

实际上,您并不是从上下文更新实例,而是用存储在mbr变量中的未连接/瞬态对象完全替换它。

var existingMbr = members[i];
existingMbr.firstname = mbr.firstname;
existingMbr.lastname = mbr.lastname;
existingMbr.birthdate = mbr.birthdate ;
existingMbr.gender = mbr.gender;
existingMbr.paid = mbr.paid;

由于存在Mbr正在被跟踪,上下文应该检测的变化

顺便说一句,当您将敏感数据更新为membernr时,必须小心。这可能对您的业务有重要意义。