2016-01-18 38 views
0

我正在使用實體框架來訪問我的MSSQL數據庫。在一個函數中,查詢被調用兩次。同時,相應的數據發生變化。當我嘗試再次執行查詢,但仍返回相同的值,因爲它首先做的:(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));          
} 

需要對一些參數的第一個電話。它怎麼可能不會返回新值? 當我不執行第一次調用並預定義參數時,它工作正常。

在此先感謝和抱歉,如果我的問題應該是重複的,我找不到這個問題的任何其他問題...

回答

2

FindAsyncdocumentation狀態

異步發現與實體給定的主鍵值。 如果具有給定主鍵值的實體存在於上下文中,那麼它將立即返回而不向商店發出請求。否則,向商店發出請求,請求具有給定主鍵值的實體,如果找到該實體,則將該實體附加到上下文並返回。如果在上下文或商店中找不到實體,則返回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);          
} 
+0

非常感謝你,是解決我的問題! :) –