首页 新闻 会员 周边

关于Entity framework 4.1如果每次从数据库取值的设置问题

0
悬赏园豆:5 [已解决问题] 解决于 2012-04-10 10:46

各位大佬,早上好,我这里使用Entity framework 4.1的时候,有一个查询列表,在我更新了数据以后,数据库已经变了,但是我跟踪进去查询的结果还是更新前的结果,请问这个应该从哪里来设置它每次都从数据库查询呢??

IsaacZhang的主页 IsaacZhang | 菜鸟二级 | 园豆:225
提问于:2012-04-10 09:10
< >
分享
最佳答案
0

EF中为提高效率很多时候共用一个连接,但一般不会有这样的问题啊,可能是你的代码写的有问题。

你如果想从数据库查询,可以把更新的部分提交(有个commit操作)后再查询

收获园豆:5
artwl | 专家六级 |园豆:16736 | 2012-04-10 09:20

下面是更新时候的语句,我将新增和修改写在一个里面, [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"); }

IsaacZhang | 园豆:225 (菜鸟二级) | 2012-04-10 09:26

db.SaveChanges(); 这个提交不可以吗??  谢谢

IsaacZhang | 园豆:225 (菜鸟二级) | 2012-04-10 09:26

新增和删除后都可以正常获取,就只有更新以后不可以,但是数据库确实已经成功更新了。。。

IsaacZhang | 园豆:225 (菜鸟二级) | 2012-04-10 09:27

@IsaacZhang: 能否把代码用编辑器格式化一下,这样看不清楚啊

artwl | 园豆:16736 (专家六级) | 2012-04-10 09:28
 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: 

IsaacZhang | 园豆:225 (菜鸟二级) | 2012-04-10 09:30

@artwl:因为我之前使用一个公用链接DB的时候,直接就是报 什么键 唯一的错误。。。

IsaacZhang | 园豆:225 (菜鸟二级) | 2012-04-10 09:34

@IsaacZhang: 这里没什么问题,你取数据是怎么取的?

artwl | 园豆:16736 (专家六级) | 2012-04-10 09:39

@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>&nbsp;&nbsp;<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 | 园豆:225 (菜鸟二级) | 2012-04-10 09:47

@IsaacZhang: 你用SQL Server Profiler监测一下,看看SQL语句执行顺序是什么样的

artwl | 园豆:16736 (专家六级) | 2012-04-10 09:59

@artwl: 我都不好意思告诉你,我刚到这个单位时间不长,单位的所有机器装的数据库05还是体验版的......还不让换.没有监测工具,无敌死了。。。不过我觉得应该是我更新完了之后,EF DBContext里面的对象集合没有及时更新,而每一次取列表数据的时候,又是直接从DB里面取的。。。

IsaacZhang | 园豆:225 (菜鸟二级) | 2012-04-10 10:07
其他回答(1)
0

是不是什麽地方 設置了緩存。

無限遐想 | 园豆:3740 (老鸟四级) | 2012-04-10 09:44

没有设置呀,跟踪程序进去以后,看到取的列表数据还是更新之前的,但是从数据库查询确实已经更新过了,纠结死了。。。在网上搜EF缓存也查不到。。。

支持(0) 反对(0) IsaacZhang | 园豆:225 (菜鸟二级) | 2012-04-10 09:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册