2010-09-01 51 views
2

我有一個相對簡單的用例失敗。考慮以下代碼:LINQ + WCF +交易

[OperationBehavior(TransactionScopeRequired = true)] 
public IEnumerable<StatusRecord> ReadActive(int contactID, bool isActive) 
{ 
    var result = from n in ORM.Default.Table<StatusRecord>() 
       where n.lng_contact_id == contactID && n.dte_effective_end == null 
       select n; 

    return result; 
} 

這是使用我們自己的邪惡來源的自定義LINQ-SQL提供程序。通常情況下,這種類型的通話效果很好,但是當從DTC處理的WCF通話中使用它時,它會掛起。我的理論是,將結果序列化到數組中不知何故發生在事務範圍之外,因此掛起。此外,我的理論是一個事實,即改變線

return result; 

return result.ToArray(); 

使事情工作的支持。雖然我很高興有一個解決方法,但似乎有一個更好的方式來獲得這種行爲。請指教。謝謝!

+0

當然,你想在你的查詢返回給你的WCF客戶端之前實現(ToList()/ ToArray()等)你的查詢嗎? – StuartLC 2010-09-01 19:31:54

回答

1

不要在WCF操作中使用已執行的執行。在返回結果之前,您必須執行查詢 - 這就是您在result.ToArray()中所做的操作。

+0

我跟着你,但沒有交易延期執行工作正常。 WCF自動展平/序列化/實現(無論正確的詞是什麼)枚舉 - 希望我也可以在這裏做到這一點。 – Malachi 2010-09-01 23:06:38