gpt4 book ai didi

c# - 建议在 Entity Framework 4 中使用临时表或表变量。更新性能 Entity Framework

转载 作者:可可西里 更新时间:2023-11-01 08:38:20 26 4
gpt4 key购买 nike

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

Id 是从外部进程传入的。

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

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

如何使用 Entity Framework 实现上述目标

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

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

虽然用 300,000 行填充一个临时表并进行连接比调用 SPROC 300,000 次要快,但我还是做出了上述假设 :)[ID 是 Guid]

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

最佳答案

对于 30 万行这样的数据量,我会忘记 EF。我会通过这样的表格来做到这一点:

BatchId  RowId

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

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

100034   17
100034 22
...
100034 134556

然后我会使用一个简单的存储过程来进行连接和更新(并从表中删除批处理)。

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

关于c# - 建议在 Entity Framework 4 中使用临时表或表变量。更新性能 Entity Framework ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5052053/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com