上下文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();
}
}
实际上,您并不是从上下文更新实例,而是用存储在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时,必须小心。这可能对您的业务有重要意义。