钟二网络头像

钟二网络

探索SQL查询技巧、Linux系统运维以及Web开发前沿技术,提供一站式的学习体验

  • 文章92531
  • 阅读1089775
首页 SQL 正文内容

efcore执行原生sql

钟逸 SQL 2025-08-12 01:54:06 1

EF Core 作为 Entity Framework 的开源实现,提供了丰富的 ORM 功能,但有时需要执行复杂的或原始的数据库操作,此时使用原生 SQL 是一个有效的选择。

何时使用原生 SQL

使用原生 SQL 可以解决以下场景:

执行复杂的查询,例如嵌套子查询或使用特定数据库函数。

访问 EF Core 实体模型中不可用的数据库对象,如存储过程或表值函数。

进行大规模数据插入或更新,提升性能。

执行原生 SQL

在 EF Core 中执行原生 SQL 有多种方式,最常见的是使用 FromSqlRawFromSqlInterpolated

// 使用 FromSqlRaw

var results = context.MyEntities.FromSqlRaw("SELECT * FROM MyTable").ToList();

// 使用 FromSqlInterpolated

var results = context.MyEntities.FromSqlInterpolated($"SELECT * FROM MyTable WHERE Name LIKE '{filter}'").ToList();

注意:使用原生 SQL 时,需要小心 SQL 注入攻击,建议使用参数化查询或其他安全机制来防御。

返回实体或投影

EF Core 允许将原生 SQL 查询结果映射到实体或投影类型,从而简化结果处理:

// 映射到实体类型

var results = context.MyEntities.FromSqlRaw("SELECT * FROM MyTable")

.AsEnumerable()

.Select(e => new { Id = e["Id"], Name = e["Name"] });

// 映射到投影类型

var results = context.MyEntities.FromSqlRaw("SELECT Id, Name FROM MyTable")

.Select(e => new MyProjection { Id = e.Id, Name = e.Name });

性能注意事项

原生 SQL 可以提供更好的性能,但应谨慎使用以下原因:

EF Core 无法跟踪原生 SQL 查询的结果,因此无法自动更新或删除实体。

原生 SQL 绕过了 EF Core 的映射和验证逻辑,可能导致未定义的行为或异常。

原生 SQL 可能会受到数据库方言的影响,导致在不同数据库上产生不同的结果。

EF Core 执行原生 SQL 是扩展数据库操作能力的强大工具。通过小心使用和了解其限制,开发者可以提高应用程序的性能和灵活性。

文章目录
    搜索