2010-12-13 39 views
0

我遇到了一個與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表。這個調用在循環內是正確的(我可以闖入代碼並看到它在每次循環迭代中調用該方法)。

有沒有人見過這樣的事情?

任何想法/幫助/提示將非常感激。

謝謝!

+1

我會建議啓動SQL事件探查器並做一些監控。有可能您的EF上下文僅進行初始調用,而後續調用僅返回內存中的對象。 – e36M3 2010-12-13 20:58:05

回答

0

當您拉入新數據時,是否在臨時表中進行ID更改?如果主ID不更改,EF將不會檢測到數據更改。

您是否每次抓取新數據時都會重新創建上下文?

+0

是的,我不得不放棄並重新創建上下文。我想我錯過了那一步!謝謝! – SlackerCoder 2010-12-16 21:15:33