使用EF Core执行原生SQL可通过ExecuteSqlRaw或ExecuteSqlInterpolated方法实现,推荐使用后者以避免SQL注入;两者均属于DbContext.Database属性,适用于插入、更新等操作,且建议采用异步版本如ExecuteSqlInterpolatedAsync以提升性能;需注意原生SQL不触发变更跟踪与生命周期事件,仅在必要时使用。

在C#中使用EF Core执行原生SQL进行插入或更新操作,可以通过 ExecuteSqlRaw 或 ExecuteSqlInterpolated 方法实现。这些方法属于 DbContext 的 Database 属性,适用于需要直接运行SQL语句的场景。
1. 使用 ExecuteSqlRaw 执行原生SQL
该方法允许你传入一个格式化的SQL字符串,适合动态拼接SQL,但需注意防止SQL注入。
注意:不要将用户输入直接拼接到SQL中,应使用参数化方式。
示例:插入数据
context.Database.ExecuteSqlRaw( "INSERT INTO Users (Name, Email, CreatedTime) VALUES ({0}, {1}, {2})", "张三", "zhangsan@example.com", DateTime.Now);
示例:更新数据
context.Database.ExecuteSqlRaw( "UPDATE Users SET Name = {0} WHERE Id = {1}", "李四", 1);
2. 使用 ExecuteSqlInterpolated(推荐)
该方法使用内插字符串语法,自动处理参数化,更安全且语法清晰。
示例:插入数据
context.Database.ExecuteSqlInterpolated( $"INSERT INTO Users (Name, Email, CreatedTime) VALUES ({'王五'}, {'wangwu@example.com'}, {DateTime.Now})");
示例:更新数据
var name = "赵六";var id = 2;context.Database.ExecuteSqlInterpolated( $"UPDATE Users SET Name = {name} WHERE Id = {id}");
3. 异步执行(推荐用于生产环境)
为避免阻塞主线程,建议使用异步版本:
ExecuteSqlRawAsyncExecuteSqlInterpolatedAsync
示例:
await context.Database.ExecuteSqlInterpolatedAsync( $"UPDATE Users SET Name = {name} WHERE Id = {id}");
4. 注意事项
执行原生SQL不会触发EF Core的变更跟踪或实体生命周期事件(如SaveChanges拦截器),也不会验证数据注解。因此:
仅在性能要求高或复杂SQL难以用LINQ表达时使用手动确保数据一致性参数务必使用{0}占位符或内插变量,避免字符串拼接基本上就这些。原生SQL执行灵活,但要慎用,优先考虑EF Core的常规Add/Update + SaveChanges模式。
以上就是C#中如何使用EF Core的查询原生SQL插入/更新?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1440337.html
微信扫一扫
支付宝扫一扫