2011-03-04 58 views
1

我有一個存儲過程在數據庫中,我需要從Entity Framework內調用n次。從實體框架調用存儲過程n次

public Points GetResults(Share share, DateTime startDate, DateTime endDate) 
    { 
     using (var ctx = new MyDatabaseEntities()) 
     { 
      int? stockId = GetID(share, endDate); 
      var data = ctx.GetData(stockId, 123, startDate, endDate, -23, 14, 3); 
      var selectedPoints = data.Where(a => a.Date.HasValue && a.Value.HasValue).ToDictionary(a => a.Date.Value, a => a.Value.Value); 
      return new Points(selectedPoints); 
     } 
    } 

我必須給n個股票(500股,500個電話)打電話。目前我發現它對我來說有點性能瓶頸。存儲過程中有很多邏輯,我無法移出proc。有沒有人有任何提示加快速度?或者我只是因爲我需要調用這個過程n次?

+0

你使用的是什麼數據庫和版本? –

+0

SQL Server 2005 –

回答

1

如果存儲過程只需要一個StockId,並且你需要很多結果,那麼你別無選擇,只能調用它500次,這總是會很慢。

真的,你需要看看修改SP,我建議看看錶值參數取決於使用的數據庫引擎。

+0

我認爲這幾乎是我必須要做的。我無法編輯proc,但我可以編寫自己的sql。說真的,你應該看到sql,它就像超過1000行的動態可怕性。 –

+0

大聲笑 - 我一直在那裏!你可以看看編寫一個新的存儲過程,它接受這組ID。在其中,您可以使用遊標迭代地調用現有的SP,以便在插入臨時表的情況下調用現有的SP使用INSERT EXEC sp。然後在最後選擇表格的內容。這應該會更快,因爲您沒有與要抗衡的呼叫的網絡延遲。 –