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