使用Linq和EF 6无法从数据库获取最新数据

时间:2016-11-18 15:10:11

标签: c# entity-framework linq

我正在尝试从数据库表中获取数据,以便我可以将数据写入.csv文件。我正在使用EF 6和Linq。

我遇到的问题似乎是我的Linq查询没有从我的数据库中提取最新数据。即使在我更改了数据库中的数据之后,它仍继续提取旧数据。数据库的模式和表都没有改变,只有数据。

 var cc = new CsvContext();
                string strFilePathLoc = "";


                var context = new SabraToBellEmployeeDataEntities();
                // get employee data
                var queryData = from b in context.SabraBellDatas
                                orderby b.LastName ascending
                                select b;

                // get location path for file
                var context2 = new BellFtpInfoEntities();
                var filepath = from b in context2.FtpFilePathInfoes
                               where b.CompanyDescriptor.Equals("Bell Techlogix")
                               select new
                               {
                                   strfilePath = b.FtpFilePath
                               };                    

                foreach (var item in filepath)
                {
                    strFilePathLoc = item.strfilePath;
                }


                //write data out based on queries above
                cc.Write(
               queryData, strFilePathLoc,
               fileDescription_anon);

                context.Dispose();
                context2.Dispose();     

字符串变量继续返回C:\ SabraBellFiles \ SabraBellUpload.csv,这是我数据库中的原始旧数据。我已经将其更改为C:\ SabraBellFiles \ SabraBellUpload.csv,但是当我在运行时调试时,我的变量没有该值。

不确定问题是否与Entity Framework或我的Linq查询有关。

每次查询运行时,如何确保我的查询从数据库中获取最新信息?

1 个答案:

答案 0 :(得分:1)

一般来说,某些东西正在缓解旧的结果。如果您正在重用相同的DB上下文,则可能是Entity Framework造成的。

但是,如果要强制EF获取最新数据,可以使用.AsNoTracking扩展名告知EF不要将结果添加到上下文中。 MSDN

但实际上,如果这有效,则意味着您正在重复使用上下文。你真的应该修复它。