建议在实体框架 4 中使用临时表或表变量。更新性能实体框架

2024-01-05

我需要更新表中的一个位字段,并针对该表中的特定 Id 列表将该字段设置为 true。

Id 从外部进程传入。

我想在纯 SQL 中,最有效的方法是创建一个临时表并用 Id 填充它,然后用它连接主表并相应地设置位字段。

我可以创建一个 SPROC 来获取 Id,但可能涉及 200 - 300,000 行需要设置此标志,因此它可能不是最有效的方法。使用 IN 语句对可传递的数据量和性能有限制。

如何使用实体框架实现上述目标

我猜想可以创建一个 SPROC 来创建临时表,但这从模型的角度来看是不存在的。

有没有办法在运行时动态添加实体。 [或者这种方法只会引起头痛]。

我做出上面的假设,尽管用 300,000 行填充临时表并进行联接会比调用 SPROC 300,000 次更快:) [ID 是指南]

我应该考虑另一种方法吗?


对于像 300k 行这样的数据量,我会忘记 EF。我会通过一张表来做到这一点,例如:

BatchId  RowId

其中 RowId 是我们要更新的行的 PK,而 BatchId 只是指此 300k 行的“运行”(以允许同时多个行等)。

我将生成一个新的 BatchId(这可以是任何唯一的 -Guid 跃入脑海),并使用 SqlBulkCopy 将记录插入到该表中,即

100034   17
100034   22
...
100034   134556

然后,我将使用单个存储过程进行连接和更新(并从表中删除批次)。

SqlBulkCopy 是将大量数据传输到服务器的最快方法;您不会淹没在往返旅程中。 EF 是面向对象的:适用于很多场景 - 但不是这个。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

建议在实体框架 4 中使用临时表或表变量。更新性能实体框架 的相关文章

随机推荐