You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EF Core 7中ExecuteUpdateAsync查询无法翻译的解决方法问询

解决ExecuteUpdateAsync无法翻译的问题

针对你的问题,给出两种无需加载实体、适配百万级数据量的修改方案:

方案一:修正属性自增表达式(适用于EF Core 7.0+)

如果你的EF Core版本是7.0及以上(ExecuteUpdateAsync是7.0新增的批量更新API),报错大概率是因为NumberOfMention为可空类型,导致EF无法解析自增逻辑。修改表达式处理空值即可:

await _tagRepository.DomainContext
    .Tag
    .Where(x => x.Id == tag.Id)
    .ExecuteUpdateAsync(s => s.SetProperty(
        p => p.NumberOfMention, 
        p => (p.NumberOfMention ?? 0) + 1
    ));

方案二:直接执行参数化SQL(全版本通用,性能最优)

如果版本低于7.0,或上述方案仍报错,直接用参数化SQL在数据库层面执行更新是最稳妥的选择——完全绕开EF翻译逻辑,性能拉满:

var updateSql = "UPDATE Tag SET NumberOfMention = NumberOfMention + 1 WHERE Id = @TagId";
await _tagRepository.DomainContext.Database.ExecuteSqlRawAsync(
    updateSql, 
    new Microsoft.Data.SqlClient.SqlParameter("@TagId", tag.Id)
);

参数化查询能有效避免SQL注入风险,同时保证参数类型匹配。

内容的提问来源于stack exchange,提问作者Massimiliano Peluso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 16:02:16