我遇到了一個與EF和SQL碰到的問題。我有一個瘋狂的存儲過程,很好地轉換成C#代碼(EF/LINQ)。基本上,我所做的就是用SqlConnection和SqlCommand調用(System.Data.SqlClient)[見下文]調用存儲過程,然後使用EF從表中抽取數據。這一直髮生,直到主表耗盡。 (我有一個包含數十萬條記錄的主表,並且存儲的proc將其中的一小部分拉到一張表中進行處理,一旦處理完畢,這些記錄將從主表中刪除,並重新執行,直到主表已經完全處理)。使用SQL調用進行更新時,EF中的表不更新?
問題是,表不會在C#中更新,但它在後端得到更新。
因此,這裏的SQL調用:
SqlConnection sqlConn;
SqlCommand sqlCommand;
using (sqlConn = new SqlConnection(ConfigurationManager.ConnectionStrings["AppMRIConnection"].ConnectionString))
{
using (sqlCommand = new SqlCommand(String.Format("EXEC sp_PullFinalDataSetPart '{0}', '{1}'", sLocation, sOutputFileType), sqlConn))
{
sqlConn.Open();
sqlCommand.ExecuteNonQuery();
sqlConn.Close();
}
}
那截斷FinalDataSetPart表,並與X新記錄重新加載它。
這是在C#中調用
List<FinalDataSetPart> lstFinalPart = db.FinalDataSetPart.ToList();
這個調用總是會得到加載的,無論什麼實際上是在表中的第一finaldatasetpart表。這個調用在循環內是正確的(我可以闖入代碼並看到它在每次循環迭代中調用該方法)。
有沒有人見過這樣的事情?
任何想法/幫助/提示將非常感激。
謝謝!
我會建議啓動SQL事件探查器並做一些監控。有可能您的EF上下文僅進行初始調用,而後續調用僅返回內存中的對象。 – e36M3 2010-12-13 20:58:05