我正在使用Entity Framework来访问我的MSSQL DB。在一个函数中,查询被调用两次。与此同时,相应数据也发生了变化。当我再次尝试执行查询时,它仍然返回与第一个位置相同的值:( Umfragen是类)
Umfrage Survey = await db.Umfragen.FindAsync(SurveyId);
SqlCommand Command = new SqlCommand("UpdateSurvey", ConnectionString);
Command.CommandType = CommandType.StoredProcedure;
using (ConnectionString)
{
ConnectionString.Open();
Command.ExecuteNonQuery();
return Ok(await db.Umfragen.FindAsync(SurveyId));
}
某些参数需要第一次调用。它怎么可能不返回新值? 当我不执行第一个调用并预定义参数时,它可以正常工作。
提前致谢,如果我的问题应该重复,我很抱歉,我找不到任何其他问题...
答案 0 :(得分:2)
FindAsync
documentation个州
异步查找具有给定主键值的实体。 如果上下文中存在具有给定主键值的实体,则会立即返回该实体而不向商店发出请求。否则,将向具有给定主要实体的实体发出请求键值和此实体(如果找到)将附加到上下文并返回。如果在上下文或商店中找不到实体,则返回null。
在您的情况下,第一次调用FindAsync
会在上下文中加载实体,因此即使稍后在数据库中更新它,第二个FindAsync
也会返回相同的缓存实例。
为了刷新缓存的实例,您可以像这样使用DbEntityEntry.ReloadAsync方法
Umfrage Survey = await db.Umfragen.FindAsync(SurveyId);
SqlCommand Command = new SqlCommand("UpdateSurvey", ConnectionString);
Command.CommandType = CommandType.StoredProcedure;
using (ConnectionString)
{
ConnectionString.Open();
Command.ExecuteNonQuery();
await db.Entry(Survey).ReloadAsync();
return Ok(Survey);
}