2013-04-01 26 views
0

我最近升級到devart 7.5並且一些功能無法正常工作。具體而言,我有一個返回一個IEnumerable的函數:devart dc.ExecuteQuery返回對象未設置爲對象的實例

protected IEnumerable<BudgetTotals> getTotals(decimal groupId, decimal budgetId) 
{ 
    using (SsinpatDataContext dc = new SsinpatDataContext()) 
    { 
     object[] ids = new object[2] { groupId, budgetId }; 
     string sqlStr = "..." 
     var query = dc.ExecuteQuery<BudgetTotals>(sqlStr, ids); 
     return query; 
    } 
} 

爲了這一點上,一切工作正常,返回變量「query」擁有正確的價值觀。
問題是,調用getTotals當對象未設置:

... 
var query = getTotals(grpId,bdgId); 
foreach(BudgetTotals bt in query) 
{ 
    ... 
} 

現在,當「在」控制到達在foreach指令異常與消息"Object not set to an instance of an object",這是我百思不得其解,因爲

拋出

a)其工作正常和

b)該對象getTotals funcion內。


我可以通過將返回值從IEnumerable更改爲BudgetTotals[]並返回query.ToArray來解決問題。我試了一下,它的工作原理。這裏的主要問題是返回IEnumerable的所有其他函數。

在檢修應用程序之前,我想了解爲什麼或什麼導致了devart 6.3到7.5之間的這種行爲差異。

預先感謝

回答

1

執行在「getTotals」功能executeQuery方法時,用於獲得該數據的實體讀取器被打開以用於當前DataContext對象(DC)。退出「getTotals」函數中的「使用」塊後,將放置DataContext對象(dc)並關閉其所有實體讀取器。因此,當您嘗試讀取foreach語句中的數據時,讀者已關閉,並且發生異常(我們更改了異常的文本,現在它會提供更多信息)。 JIC:在較早的版本中,關閉實體讀取器可能存在一些問題。

相關問題