我的程序中有一个使用 Entity Framework 4 EDM 的进程。实体上下文对象包含用于调用存储过程的函数导入。
该进程从远程服务器接收一批数据。批处理可以包含我们任何表/数据类型的数据(每种数据类型都存储在自己的表中)。该批次还可以多次包含同一行的数据。它必须将其作为单个插入(对于第一次出现)和一个或多个更新(对于每个后续出现)来处理。INSERT ... ON EXISTING UPDATE
因此,存储过程使用该命令实现了 upsert 操作。
我们的代码基本上确定要调用哪个存储过程,然后使用该存储过程的实体上下文对象的方法调用它。然后整个批处理必须在单个事务中完成,因此我们context.Connection.BeginTransaction()
在批处理开始时调用。
有一种数据类型有数百万行。我们需要尽快加载这些数据。我正在实现使用SABulkCopy
该类导入该数据类型的逻辑。这也需要是已经开始的单个事务的一部分。问题是我需要将 an 传递SATransaction
给SABulkCopy
类的构造函数(无法使用属性对其进行设置)并且我没有SATransaction
. context.Connection.BeginTransaction()
返回一个DBTransaction
。我试图把它变成一个SATransaction
没有成功的东西。
让SABulkCopy
对象加入事务的正确方法是什么?