EF修改数据后如何更新缓存?

adobase 2016-02-14 05:00:43
修改完数据后缓存还是没有变。 读的还是以前的。
有什么方法能更新缓存? 重新查询一遍?
...全文
616 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
丰云 2016-02-16
  • 打赏
  • 举报
回复
引用 2 楼 adobase 的回复:
        public int QueryUserIdByName(string username,string password)
        {
            usertable model = db.usertable.Where(x => x.username == username || x.password == password).First();
            if (model != null && model.id != 0)
            {
                return model.id;
            }
            return 0;
        }
x => x.username == username || x.password == password。。。。。。 居然用或条件。。。。真悬。。。。不知道是什么业务。。。。。
adobase 2016-02-14
  • 打赏
  • 举报
回复
引用 11 楼 foren_whb 的回复:
使用一门新技术,首先要了解其技术原理,entityframework也不例外,知道原理,再回头看这些问题,就洞若观火,非常明了。 我都不想解释了,打字太费神
哈哈是,懂得。 不好意思,一开始写的时候一个地方写成固定的了, = =。谢谢了。 2l 6l
丰云 2016-02-14
  • 打赏
  • 举报
回复
使用一门新技术,首先要了解其技术原理,entityframework也不例外,知道原理,再回头看这些问题,就洞若观火,非常明了。 我都不想解释了,打字太费神
丰云 2016-02-14
  • 打赏
  • 举报
回复
引用 10 楼 adobase 的回复:
[quote=引用 7 楼 foren_whb 的回复:] public void SetUserState(User model) { usertable tab = new usertable(); tab.id = model.id; tab.username = model.username; tab.password = model.password; tab.email = model.email; tab.phone = model.phone; tab.logintime = DateTime.Now; tab.loginip = model.loginip; tab.groupid = 1; tab.key = ""; db.usertables.Add(tab); model.key = "0"; //清空key model.groupid = 1; int ret = db.SaveChanges(); return; }
这个是更新下数据不是添加阿 = =[/quote] 如果是更新,那就换下写法: public void SetUserState(User model) { usertable tab = db.usertable.FirstOrDefault(x => x.username == username || x.password == password); tab.id = model.id; tab.username = model.username; tab.password = model.password; tab.email = model.email; tab.phone = model.phone; tab.logintime = DateTime.Now; tab.loginip = model.loginip; tab.groupid = 1; tab.key = ""; int ret = db.SaveChanges(); model.key = "0"; //清空key model.groupid = 1; return; }
adobase 2016-02-14
  • 打赏
  • 举报
回复
引用 7 楼 foren_whb 的回复:
public void SetUserState(User model) { usertable tab = new usertable(); tab.id = model.id; tab.username = model.username; tab.password = model.password; tab.email = model.email; tab.phone = model.phone; tab.logintime = DateTime.Now; tab.loginip = model.loginip; tab.groupid = 1; tab.key = ""; db.usertables.Add(tab); model.key = "0"; //清空key model.groupid = 1; int ret = db.SaveChanges(); return; }
这个是更新下数据不是添加阿 = =
丰云 2016-02-14
  • 打赏
  • 举报
回复
entry.State = System.Data.EntityState.Unchanged; entry.Property("key").IsModified = true; 这种做法只在少数情况下才用,不知道怎么被宣传为主要的应用方法,到底是因为一群无知的人误传造成的,还是微软文档翻译不当,造成的误解呢??
丰云 2016-02-14
  • 打赏
  • 举报
回复
public void SetUserState(User model) { usertable tab = new usertable(); tab.id = model.id; tab.username = model.username; tab.password = model.password; tab.email = model.email; tab.phone = model.phone; tab.logintime = DateTime.Now; tab.loginip = model.loginip; tab.groupid = 1; tab.key = ""; db.usertables.Add(tab); model.key = "0"; //清空key model.groupid = 1; int ret = db.SaveChanges(); return; }
adobase 2016-02-14
  • 打赏
  • 举报
回复
确实更新进去了。 6L为啥这么仇视这种做法 - -。这或许就跟goto一样 不符合程序逻辑吧。 但是确实可以实现。 如何查询出实例对象, savechanges 会自动清空缓存么? 请教大牛么。
wanghui0380 2016-02-14
  • 打赏
  • 举报
回复
额,我觉着你应该先检查一下数据库,看看东西更新到数据库没有 因为从你的代码上看,下面几句话貌似有些问题,因为EF更新执行需要依赖行状态,这几句话貌似貌似有问题,我不太肯定这几句是否能正常更新到数据库,EF版本太多,各个版本语法多少有些差异(现在为避免误会最新版都直接更名为EF core 1.0了),不过多数版本正常操作,应该是将实体状态state设置为EntityState.Modified才能正常更新到数据库中
 entry.State = System.Data.EntityState.Unchanged; 
            entry.Property("key").IsModified = true;
            entry.Property("groupid").IsModified = true;
            model.key = "0";  //清空key
            model.groupid = 1;
            int ret = db.SaveChanges();
丰云 2016-02-14
  • 打赏
  • 举报
回复
真是莫名其妙,上面明明写的 entry.State = System.Data.EntityState.Unchanged; entry.Property("key").IsModified = true;\ 那还SaveChanges个毛啊!!!! 最讨厌用DbEntityEntry<usertable> entry = db.Entry<usertable>(tab);这种方法了,自以为是的搞法,不知道是从哪里传出去的!!!
adobase 2016-02-14
  • 打赏
  • 举报
回复
引用 1 楼 wanghui0380 的回复:
相关代码贴一下
代码贴上了。 就是修改数据后 还是读的以前的缓存。有没有方法可以在添加数据的时候把这个表的缓存清空掉? 然后重新查询最新的数据
adobase 2016-02-14
  • 打赏
  • 举报
回复
        public void SetUserState(User model)
        {
            usertable tab = new usertable();
            tab.id = model.id;
            tab.username = model.username;
            tab.password = model.password;
            tab.email = model.email;
            tab.phone = model.phone;
            tab.logintime = DateTime.Now;
            tab.loginip = model.loginip;
            tab.groupid = 1;
            tab.key = "";
            DbEntityEntry<usertable> entry = db.Entry<usertable>(tab);
            entry.State = System.Data.EntityState.Unchanged;
            entry.Property("key").IsModified = true;
            entry.Property("groupid").IsModified = true;
            model.key = "0";  //清空key
            model.groupid = 1;
            int ret = db.SaveChanges();
            return;
        }
//这是更新操作
        public JsonResult login(User model)
        {
            jsonres = new JsonRes();
            jsonresult = new JsonResult();
            int uRet = UserDal.CheckUser(model);
            if (uRet == 1)
            {
                //设置当前登录ID
                AppBase.UserId = UserDal.QueryUserIdByName(model);
                //return RedirectToAction("left", "back");
                UserDal.UpdateLoginIp(model);
                jsonres.tip = "ok";
                jsonres.res = "登录成功";
                jsonresult.Data = jsonres;
                return jsonresult;
            }
            else if (uRet == 2)
            {
                //Response.Write("<script type=\"text/javascript\">alert('您的账号还未激活,请登录到注册邮箱进行激活!');</script>");
                jsonres.tip = "failed";
                jsonres.res = "您的账号还未激活,请登录到注册邮箱进行激活!";
                jsonresult.Data = jsonres;
                return jsonresult;

            }
            jsonres.tip = "failed";
            jsonres.res = "验证失败,请检查用户名和密码";
            jsonresult.Data = jsonres;
            return jsonresult;
            
        }
这是读取数据的哪里。
        public int QueryUserIdByName(string username,string password)
        {
            usertable model = db.usertable.Where(x => x.username == username || x.password == password).First();
            if (model != null && model.id != 0)
            {
                return model.id;
            }
            return 0;
        }
adobase 2016-02-14
  • 打赏
  • 举报
回复
就是修改数据后 还是读的以前的缓存。有没有方法可以在添加数据的时候把这个表的缓存清空掉? 然后重新查询最新的数据
wanghui0380 2016-02-14
  • 打赏
  • 举报
回复
相关代码贴一下

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧