2012-11-16 26 views
3

我有一個只需要一個id的select方法的WCF服務。我需要使用幾個(20+)加載選項來獲取我需要返回的所有內容,所以我認爲這會讓一個非常複雜的查詢和編譯它成爲一個好主意。到目前爲止我發現的唯一方法是創建靜態數據上下文並加載選項以與編譯後的查詢一起使用。如果我不這樣做,它會抱怨使用與編譯時不同的上下文。所以這讓我的問題應該做到這一點?在Web服務上使用靜態數據上下文會導致問題?它只會用於這種方法。所有其他方法創建它們自己的。我只是害怕我可能最終會爲此決定付出代價,所以任何提示都會很棒!謝謝!我可以在Web服務中使用已編譯的查詢嗎?

private static DataLoadOptions loadOptions = GetDataLoadOpt(); 

    private static readonly Func<ItemsDataContext, int, Data.Item> SelectItem = 
     CompiledQuery.Compile((ItemsDataContext DataContext, int ItemId) => 
      DataContext.Items.Where(r => r.ItemID == ItemId).FirstOrDefault()); 

    private static DataLoadOptions GetDataLoadOpt() 
    { 
     var loadOpts = new System.Data.Linq.DataLoadOptions(); 
     loadOpts.LoadWith<Data.Item>(d => d.ItemProp); 
     . 
     . 
     . 
     return loadOpts; 
    } 
+0

你可以發佈你的代碼嗎?我想不出爲什麼需要一個數據上下文來編譯。我的一個項目中有30多個編譯查詢,這些查詢都是在沒有上下文的情況下完成的。 – Dai

+0

希望這足以讓我知道我正在與 – Mike

+0

一起工作,您是否也可以發佈異常和堆棧跟蹤? – Dai

回答

0

Web服務調用是不同的。我還沒有發現擁有一個共享的靜態上下文可以節省時間,因爲無論如何,這個調用都會結束新的實例。而且我還有幾個對象,在我的一些項目中有非常大的,複雜的loadoptions堆棧。在某些情況下,我有一些性能下降,因爲我要帶回這麼多的表,但如果連接強大(精心設計的DB),那麼它不會太糟糕。

相關問題