我有這種方法,這將從WCF客戶端調用,但對於我的測試,我使用本地「添加項目引用」。我收到錯誤消息,說明它在處理後無法調用DataContext。LINQ TO SQL我在這裏丟失了一些明顯的東西嗎?
public IEnumerable<Server> GetServers()
{
// initialze to null
ServersDataContext sdc = null;
try
{
// get connected
using (sdc = GetDataContext())
{
// disable this deferred loading
sdc.DeferredLoadingEnabled = false;
var relations = from svr in sdc.Servers; // complex linq here
// return
return relations;
}
}
catch (Exception ex)
{
LogError(ex, "fwizs.Internal");
throw;
}
finally
{
if (sdc != null)
{
sdc.Dispose();
}
}
}
這裏是我如何使用方法,它給出了這樣的錯誤:「無法訪問已釋放的對象」
if (da.GetServers()
.Select(sv => sv.ServerID == s.ServerID).Count() == 0)
{
// do work since we found it
}
使用這個返回的IEnumerable對象。選擇()方法改掉跑回數據庫做出選擇。序列化爲WCF後,我不認爲這會是一個問題,但我希望我的本地測試工作。
雖然它沒有很好的理由處置兩次,但不會導致錯誤。任何正確實現IDisposable的對象都可以被處置多次而不會造成傷害。 – Guffa