我的程序中有一个使用Entity Framework 4 EDM的进程 . 实体上下文对象包含用于调用存储过程的函数导入 .
该进程从远程服务器接收一批数据 . 批处理可以包含任何表/数据类型的数据(每种数据类型都存储在自己的表中) . 批处理还可以多次包含同一行的数据 . 它必须将其作为单个插入(用于第一次出现)和一个或多个更新(用于每个后续出现)来处理 . 因此,存储过程使用 INSERT ... ON EXISTING UPDATE
命令实现upsert操作 .
我们的代码基本上确定要调用哪个存储过程,然后使用该存储过程的实体上下文对象的方法调用它 . 然后整个批处理必须在一个事务中完成,因此我们在批处理开始时调用 context.Connection.BeginTransaction()
.
有一种数据类型有数百万行 . 我们需要尽快加载这些数据 . 我正在使用 SABulkCopy
类实现导入该数据类型的逻辑 . 这也需要是已经开始的单个事务的一部分 . 问题是我需要将 SATransaction
传递给 SABulkCopy
类's constructor (there is no way to set it it using properties) and I don'来有一个 SATransaction
. context.Connection.BeginTransaction()
返回 DBTransaction
. 我试图把它投入 SATransaction
但没有成功 .
什么是让 SABulkCopy
对象加入交易的正确方法?
1 回答
我们放弃了
SABulkCopy
课程 . 事实证明,它不会进行批量加载 . 它创建一个SACommand
对象,该对象执行INSERT
语句并一次插入一行 . 它启动时效率低下 .我仍然需要得到与
context.Connection.BeginTransaction().
返回的DBTransaction
相关的SATransaction
我得到了一些反映代码来回应我发布的另一个问题:该计划完成了它需要做的事情 . 它's unfortunate, though, that Microsoft didn' t使
EntityTransaction
类的StoreTransaction
属性公开 .