我有一個應用程序從一個數據庫讀取數據,並將該數據轉換爲新的表單並將其寫入新的數據庫。新數據庫中的一些表格由舊數據庫中的多個表格構成,因此會有大量的讀寫操作正在進行。下面是該系統的基本概念:實體框架,多線程和事務
public void TransferData()
{
OldEntities oldContext = new OldEntities()
NewEntities newContext = new NewEntities()
using(var transaction = newContext.Database.BeginTransaction())
{
try{
TransferTable(oldContext, newContext);
} catch (Exception e) {
transaction.Rollback();
}
}
}
public void TransferTable(OldEntities oldContext, NewEntities newContext)
{
List<Entity1> mainTable = oldContext.Where();
Parallel.ForEach(mainTable, (row) =>
{
using(NewEntities anotherNewContext = new NewContext())
{
anotherNewContext.Database.UseTransaction(newContext.Database.CurrentTransaction.UnderlyingTransaction);
// Do Work
}
});
}
這將導致以下異常:
中沒有與當前連接關聯傳遞的交易。只有與當前連接關聯的交易纔可以使用。
我該如何解決這個問題。交易總是來自不同的EF環境,但我需要他們共享相同的交易。我無法找到一種方法來創建新的上下文作爲原始的「子」,我試圖避免創建一個完全獨立於EF上下文的事務。有什麼建議麼?
「我試圖避免創建一個完全獨立於EF環境的事務」 - 爲什麼? – user469104
@ user469104可能大多是天真的。我承認在交易中很弱,因爲我不能允許部分加載,所以增加了它。我假設在EF上下文之外創建一個事務將需要某種特殊的處理。如果我在這方面有錯誤,那麼請做,讓我知道。 –