各位大佬,早上好,我这里使用Entity framework 4.1的时候,有一个查询列表,在我更新了数据以后,数据库已经变了,但是我跟踪进去查询的结果还是更新前的结果,请问这个应该从哪里来设置它每次都从数据库查询呢??
EF中为提高效率很多时候共用一个连接,但一般不会有这样的问题啊,可能是你的代码写的有问题。
你如果想从数据库查询,可以把更新的部分提交(有个commit操作)后再查询
下面是更新时候的语句,我将新增和修改写在一个里面, [HttpPost] public ActionResult NewsCategory_Add(string json, string type) { NewCategory model = JsonHelper.GetNewCategory(json); if (ModelState.IsValid) { if (type.ToLower() == "add") { using (UBIQ_DB_JDZXContext db = new UBIQ_DB_JDZXContext()) { db.NewCategories.Attach(model); db.Entry(model).State = EntityState.Added; db.SaveChanges(); } } else { using (UBIQ_DB_JDZXContext db = new UBIQ_DB_JDZXContext()) { db.NewCategories.Attach(model); db.Entry(model).State = EntityState.Modified; db.SaveChanges(); } } } return View("~/Views/Administrator/NewsAdmin/NewsCategory_Manage.cshtml"); }
db.SaveChanges(); 这个提交不可以吗?? 谢谢
新增和删除后都可以正常获取,就只有更新以后不可以,但是数据库确实已经成功更新了。。。
@IsaacZhang: 能否把代码用编辑器格式化一下,这样看不清楚啊
1 [HttpPost] 2 public ActionResult NewsCategory_Add(string json, string type) 3 { 4 NewCategory model = JsonHelper.GetNewCategory(json); 5 if (ModelState.IsValid) 6 { 7 if (type.ToLower() == "add") 8 { 9 using (UBIQ_DB_JDZXContext db = new UBIQ_DB_JDZXContext()) 10 { 11 db.NewCategories.Attach(model); 12 db.Entry(model).State = EntityState.Added; 13 db.SaveChanges(); 14 } 15 } 16 else 17 { 18 using (UBIQ_DB_JDZXContext db = new UBIQ_DB_JDZXContext()) 19 { 20 db.NewCategories.Attach(model); 21 db.Entry(model).State = EntityState.Modified; 22 db.SaveChanges(); 23 } 24 } 25 } 26 27 return View("~/Views/Administrator/NewsAdmin/NewsCategory_Manage.cshtml"); 28 }
@artwl:
@artwl:因为我之前使用一个公用链接DB的时候,直接就是报 什么键 唯一的错误。。。
@IsaacZhang: 这里没什么问题,你取数据是怎么取的?
@artwl:
1 #region ------------------------------获取新闻分类列表---------------------------------------- 2 [HttpPost] 3 public void NewsCategory_List() 4 { 5 string strJson = GetNewCategoryJson(int.Parse(Request.Params["page"]), 6 int.Parse(Request.Params["rp"]), Request.Params["sortname"], Request.Params["sortorder"]); 7 8 Response.Write(strJson); 9 Response.End(); 10 } 11 /// <summary> 12 /// 封装JSON字符串 13 /// </summary> 14 /// <param name="pageIndex">页码</param> 15 /// <param name="pageCount">单页数据数</param> 16 /// <param name="sortname">排序字段</param> 17 /// <param name="sortorder">排序方式</param> 18 /// <returns></returns> 19 public string GetNewCategoryJson(Int32 pageIndex, Int32 pageCount, String sortname, String sortorder) 20 { 21 //取出记录总数 22 var count = DataHelper.db.NewCategories 23 .OrderByDescending(o => o.CateID).ToList().Count; 24 PagedList<NewCategory> list = null; 25 //根据排序type取数据 26 if (sortorder.ToLower() == "desc") 27 { 28 list = DataHelper.db.NewCategories 29 .OrderByDescending(o => o.CateID).ToPagedList(pageIndex, pageCount); 30 } 31 else 32 { 33 list = DataHelper.db.NewCategories 34 .OrderBy(o => o.CateID).ToPagedList(pageIndex, pageCount); 35 } 36 FlexGrid fg = new FlexGrid() 37 { 38 sortorder = sortorder, 39 sortname = sortname, 40 page = pageIndex, 41 total = count, 42 rows = new List<FlexRow>() 43 }; 44 foreach (var item in list) 45 { 46 FlexRow fr = new FlexRow() 47 { 48 id = item.CateID.ToString(), 49 cell = new List<string>() 50 }; 51 fr.cell.Add(item.CateID.ToString()); 52 fr.cell.Add(item.CateName.ToString()); 53 fr.cell.Add(item.Remark.ToString()); 54 String control = "<a href=\"#\" onclick=\"javascript:StartColorBox('/NewsAdmin/NewsCategory_Add/" + item.CateID + "')\">编辑</a> <a href=\"#\" onclick=\"javascript:postdata('" + item.CateID + "')\">删除</a>"; 55 fr.cell.Add(control); 56 fg.rows.Add(fr); 57 } 58 string strJson = JsonConvert.SerializeObject(fg); 59 return strJson; 60 } 61 /// <summary> 62 /// 封装列表标头 63 /// </summary> 64 /// <returns></returns> 65 public static String GetNewCategoryColumnsString() 66 { 67 List<ClumnModel> list = new List<ClumnModel>(); 68 69 list.Add(new ClumnModel() 70 { 71 display = "主键ID", 72 name = "cateid", 73 align = "left", 74 hide = true, 75 sortable = true, 76 width = 150 77 }); 78 list.Add(new ClumnModel() 79 { 80 display = "分类名称", 81 name = "CateName", 82 align = "left", 83 hide = false, 84 sortable = true, 85 width = 150 86 }); 87 list.Add(new ClumnModel() 88 { 89 display = "备注", 90 name = "remark", 91 align = "left", 92 hide = false, 93 sortable = true, 94 width = 150 95 }); 96 //list.Add(new ClumnModel() 97 //{ 98 // display = "状态", 99 // name = "state", 100 // align = "left", 101 // hide = false, 102 // sortable = true, 103 // width = 40 104 //}); 105 list.Add(new ClumnModel() 106 { 107 display = "操作", 108 name = "", 109 align = "left", 110 hide = false, 111 sortable = true, 112 width = 150 113 }); 114 return JsonConvert.SerializeObject(list); 115 } 116 #endregion
@IsaacZhang: 你用SQL Server Profiler监测一下,看看SQL语句执行顺序是什么样的
@artwl: 我都不好意思告诉你,我刚到这个单位时间不长,单位的所有机器装的数据库05还是体验版的......还不让换.没有监测工具,无敌死了。。。不过我觉得应该是我更新完了之后,EF DBContext里面的对象集合没有及时更新,而每一次取列表数据的时候,又是直接从DB里面取的。。。
是不是什麽地方 設置了緩存。
没有设置呀,跟踪程序进去以后,看到取的列表数据还是更新之前的,但是从数据库查询确实已经更新过了,纠结死了。。。在网上搜EF缓存也查不到。。。