我正在寫一個WinForms應用程序。我從數據庫中提取數據,對該數據集執行一些操作,然後計劃將其保存回數據庫。我正在使用LINQ to SQL來執行查詢到數據庫,因爲我只關注數據庫中的一個表,所以我不想爲此實現一個完整的ORM。多線程與LINQ to SQL
我從數據庫中提取數據集。但是,數據集相當大。所以目前我試圖做的是將數據集分成4個相對大小的列表(List<object>
)。
然後,我有一個獨立的後臺工作人員通過每個名單中運行,執行操作,並且同時也彙報了進展情況。一旦所有4位後臺工作人員完成處理,我計劃將這些部分合併成一個大名單。
但我不斷收到一個錯誤,而背景工人正在處理他們的唯一列表。即使對象已轉換爲List對象,對象是否仍然保持與LINQ to SQL的DataContext綁定?任何想法如何解決這一問題?我對多線程的經驗很少,所以如果我對這個完全錯誤的話,請告訴我。
謝謝你們。如果您需要任何代碼片段或任何其他信息,請詢問。
編輯:哎呀。我完全忘了給出錯誤信息。在DataContext designer.cs中,它在SendPropertyChanging
函數上給出了錯誤An item with the same key has already been added.
。
private void Setup(){
List<MyObject> quarter1 = _listFromDB.Take(5000).ToList();
bgw1.RunWorkerAsync();
}
private void bgw1_DoWork(object sender, DoWorkEventArgs e){
e.Result = functionToExecute(bgw1, quarter1);
}
private List<MyObject> functionToExecute(BackgroundWorker caller, List<MyObject> myList)
{
int progress = 0;
foreach (MyObject obj in myList)
{
string newString1 = createString();
obj.strText = newString;
//report progress here
caller.ReportProgress(progress++);
}
return myList;
}
同樣的功能由四個工人打來電話,在此基礎上的工人被調用的函數,給出了myList中不同的列表。
的對象引用被添加到列表,所以他們會保持聯繫。嘗試映射對象。 – Romoku
您能否將您收到的錯誤添加爲您的問題的編輯? –
該列表正在存儲對由DBContext正在創建的任何對象的引用,因此僅僅轉換爲列表本身不會執行任何操作.....不知道錯誤很難提供幫助:) –