我正在尝试从数据库表中获取数据,以便我可以将数据写入.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查询有关。
每次查询运行时,如何确保我的查询从数据库中获取最新信息?
答案 0 :(得分:1)
一般来说,某些东西正在缓解旧的结果。如果您正在重用相同的DB上下文,则可能是Entity Framework造成的。
但是,如果要强制EF获取最新数据,可以使用.AsNoTracking扩展名告知EF不要将结果添加到上下文中。 MSDN
但实际上,如果这有效,则意味着您正在重复使用上下文。你真的应该修复它。