DbContext SaveChange不更新数据库中的数据

时间:2018-04-02 07:48:38

标签: c# asp.net-mvc

尝试使用HTML表单更新MaxInvalidPasswordAttempts的值。当我调试我的代码时,它会显示带有更新值的b.MaxInvalidPasswordAttempts,但是当执行SaveChanges()时没有任何变化

public ActionResult Submit(config asp) {
    using(var db=new DB()) {
        Operation op = new Operation();
        var result = op.Fetch();
        foreach (var b in result) {
            b.MaxInvalidPasswordAttempts = asp.MaxInvalidPasswordAttempts;
        }
        try {
            db.SaveChanges();
        } catch (Exception e) {
            return Content(e.Message);
        }
    }
    return RedirectToAction("Index");
}

操作类

public class Operation {
    public IEnumerable<config> Fetch() {
        using (var db = new DB()) {
            var query = from b in db.config
                        select b;
            return query.ToList();
        }
    }
}

1 个答案:

答案 0 :(得分:1)

db.SaveChanges();完全与Fetch()

断开连接

即您需要保存相同的上下文或附加到您正在保存的上下文

例如

public IEnumerable<aspnet_config> Fetch(DB db)
{

    var query = from b in db.config
                select b;
    return query.ToList();    
}
更新来自 Tetsuya Yamamoto的评论

  

从第二个上下文返回IQueryable对象并使用   db.config.Attach(result)附加它的方法,然后你可以改变   之后的财产价值

更新2

  foreach (var b in result) 
  {
     db.config.Attach(b);