ADO.net实体框架访问不到数据库最新数据问题

来源:互联网 发布:mac os 10.7升级包 编辑:程序博客网 时间:2024/05/21 10:02

       我最近在开发中使用ADO.net实体框架访问数据库,一个程序写入一个程序读取,然后发现其中一个读取的程序始终访问不到最新的数据,比如A字段是int 100,然后我的一个写入程序把他改成了90,然后我的读取程序始终读取的是100;如果是更新再次读取的话,或者删除添加可以访问到正常的数据。

       搞了半天我以为底层实现是加载到内存表,好比datatable;后来记起.net的GC机制,发现数据访问是属于非托管资源。所以我找到了问题根源是因为没有释放数据访问上下文。于是就重写了代码如下:

        /// <summary>        /// 返回工单主数据,异常位空,无数据位空,falg位FALSE时执行全部查询        /// </summary>        /// <param name="dt"></param>        /// <param name="flag">falg位FALSE时执行全部查询</param>        /// <returns></returns>        public IList<T_DisplayMain> GetDisplayDB(DateTime dt, bool flag)        {            try            {                if (flag)                {                    //释放资源,避免在同一窗体中取到垃圾数据!!!                    using (MideaDisplayDBEntities md = new MideaDisplayDBEntities())                    {                        //指定日期查询,精确到天                        var a = from s in md.T_DisplayMain where s.Time.Value.Year == dt.Year && s.Time.Value.Month == dt.Month && s.Time.Value.Day == dt.Day select s;                        return a.ToList();                                  }                 }                else                {                    var a = from s in md.T_DisplayMain select s;                    return a.ToList();                }            }            catch (Exception ex)            {                LogExecute.WriteDBExceptionLog(ex);                List<T_DisplayMain> a = null;                return a.ToList();            }        }

       于是可以访问到最新的数据。虽说不是什么大问题,但却有可以说明之处。以后大家注意下非托管资源的释放问题,可能有些莫名其妙的问题就是由他们引起的。


0 0
原创粉丝点击