重用实体查询

时间:2016-01-18 17:38:04

标签: c# sql-server entity

我正在使用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));                                    
}

某些参数需要第一次调用。它怎么可能不返回新值? 当我不执行第一个调用并预定义参数时,它可以正常工作。

提前致谢,如果我的问题应该重复,我很抱歉,我找不到任何其他问题...

1 个答案:

答案 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);                                    
}