ExecuteSql与ExecuteSqlInterpolated的区别及EF Core 7/8选型疑问
ExecuteSql 和 ExecuteSqlInterpolated 的功能对比及使用建议
核心结论
- 两者功能完全相同,内部实现逻辑一致,都是通过
FormattableString实现参数化SQL执行、避免SQL注入,最终返回受影响的行数。 - EF Core 7及后续版本(包括EF8)建议优先使用
ExecuteSql。
细节说明
命名简化的背景
EF Core 7推出ExecuteSql是为了统一API命名风格:- 旧版的
FromSqlInterpolated对应EF7+的FromSql - 同理,
ExecuteSqlInterpolated对应新的ExecuteSql
由于接受FormattableString类型参数的方法,本身就具备插值参数化能力,原方法名中的Interpolated属于冗余表述,新命名更简洁直观。
- 旧版的
兼容性与演进趋势
目前ExecuteSqlInterpolated并未被标记为过时,在EF7/8中仍可正常使用,但官方后续会主推更简洁的ExecuteSql,从API演进的角度看,优先使用新方法更符合未来的版本趋势。
方法定义对比
// EF Core 3.0+ 引入的旧方法 public static int ExecuteSqlInterpolated (this Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade databaseFacade, FormattableString sql); // EF Core 7.0+ 引入的新方法 public static int ExecuteSql (this Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade databaseFacade, FormattableString sql);
内容的提问来源于stack exchange,提问作者Julian
相关产品推荐
相关产品推荐

