1

我正在使用一个实体框架项目,我需要在其中按 ID 批量更新记录。ID(即特定表的主键)在运行时可用,我想更新以下查询中的所有记录:

UPDATE EntityTable
SET Column = @p0
WHERE EntityID IN '1,2,3,[...]'

我遇到的问题是我需要处理大约 60k 个 ID(最坏的情况),而我们的数据库软件(SQL Server 2008)无法处理:

查询处理器用尽了内部资源,无法生成查询计划。这是一个罕见的事件,仅适用于极其复杂的查询或引用大量表或分区的查询。请简化查询。如果您认为您错误地收到了此消息,请联系客户支持服务以获取更多信息。

通过谷歌搜索,我发现人们使用老派DataTableSqlDataAdapter调用来实现这一点,但如果可能的话,我想保持实体框架的精神,或者如果需要的话,我想保留原始 sql。有没有办法以合理有效的方式做到这一点?

4

1 回答 1

2

EF 不直接支持批量更新,因此您必须使用直接 SQL。您最好的选择是带有包含您的 ID 的表值参数的存储过程。EF 不支持表值参数,因此您必须直接使用 ADO.NET。

您当前的解决方案只能通过将您的 ID 分成更小的组并分别为每个子集执行更新来改进。

于 2012-07-12T09:07:25.723 回答