我有一个应用程序从一个数据库读取数据,并将该数据转换为新表单并将其写入新数据库。新数据库中的某些表是由旧数据库中的多个表组成的,因此会进行大量的读写操作。以下是该系统的基本概念:
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上下文,但我需要它们共享相同的事务。我无法找到一种方法来创建一个新的上下文作为一个孩子&#34;原始的,我试图避免创建一个完全独立于EF上下文的事务。有什么建议吗?
答案 0 :(得分:1)
交易here有一个很好的概述,它解释了如何在各种环境中使用交易,其中一些环境与您的交易相似。而不是尝试按修复代码,而修改后的方法可能会有所帮助。
我假设您使用的是EF6