在Entity Framework Core中执行原生SQL查询

Entity Framework Core提供了DbSet.FromSql()方法来对基础数据库执行原始SQL查询,并将结果作为实体对象获取。
下面的示例演示如何对MS SQL Server数据库执行原始SQL查询。

var context = new SchoolContext();
var students = context.Students.FromSql("Select * from Students where Name = 'Bill'").ToList();

在上面的示例中,在Student实体集(DbSet<Student>)之后使用FromSql()方法,因此指定的SQL查询必须从Student表返回记录,该记录将在Student实体中进行转换。 Entity Framework Core将执行对数据库的指定查询,即在上面的示例中,从* Name ='Bill’的Student中选择*。

Parameterized Query(参数化查询)

FromSql方法允许使用C#中的字符串插值语法进行参数化查询,如下所示。

string name = "Bill";
var context = new SchoolContext();
var students = context.Students.FromSql($"Select * from Students where Name = '{name}'").ToList();The following is also valid.
string name = "Bill";
var context = new SchoolContext();
var students = context.Students.FromSql("Select * from Students where Name = '{0}'", name).ToList();

上面的示例将对SQL Server数据库执行以下SQL查询:

exec sp_executesql N'Select * from Students where Name = ''@p0''
',N'@p0 nvarchar(4000)',@p0=N'Bill'
go

LINQ运算符

您还可以在使用FromSql方法的原始查询之后使用LINQ运算符。

string name = "Bill";
var context = new SchoolContext();
var students = context.Students.FromSql("Select * from Students where Name = '{0}'", name).OrderBy(s => s.StudentId).ToList();

在上面的示例中,EF Core通过将FromSql方法和OrderBy运算符结合在一起执行以下查询。

exec sp_executesql N'SELECT [s].[StudentId], [s].[Name]
FROM (Select * from Students where Name = ''@p0''
) AS [s]
ORDER BY [s].[StudentId]',N'@p0 nvarchar(4000)',@p0=N'Bill'
go

FromSql的局限性

SQL查询必须返回与DbSet<T>类型相同类型的实体。例如如果在学生之后使用FromSql,则指定的查询无法返回课程实体。从FromSql()方法返回临时类型在待办事项列表中。
SQL查询必须返回表的所有列。例如context.Students.FromSql(“从学生中选择StudentId,LastName).ToList()将引发异常。
SQL查询不能包含JOIN查询以获取相关数据。在FromSql()方法之后,使用Include方法加载相关实体。

Entity Framework Core系列教程-23-原生SQL查询相关推荐

  1. Entity Framework Core系列教程-25-Entity Framework Core日志

    Entity Framework Core日志 我们经常需要在EF Core中记录SQL并更改跟踪信息以进行调试. EF Core日志记录自动与.NET Core的日志记录机制集成.因此,在隐含使用E ...

  2. Entity Framework Core系列教程-3为现有数据库生成实体模型

    在Entity Framework Core中为现有数据库创建模型 在这里,您将学习如何在Entity Framework Core中为现有数据库创建上下文和实体类.为现有数据库创建实体和上下文类称为 ...

  3. 手把手引进门之 ASP.NET Core Entity Framework Core(官方教程翻译版 版本3.2.5)

    以下是手把手引进门教程,基于 ASP.NET Core, Entity Framework Core ,ABP 框架 创建Web 应用, PS: 自带自动的测试模块哦. 样例下载 (上 github  ...

  4. ASP.NET Core 入门教程 8、ASP.NET Core + Entity Framework Core 数据访问入门

    ASP.NET Core 入门教程 8.ASP.NET Core + Entity Framework Core 数据访问入门 原文:ASP.NET Core 入门教程 8.ASP.NET Core ...

  5. 在 .NET Core 中如何让 Entity Framework Core 在日志中记录由 LINQ 生成的SQL语句

    在开发中,我们想在调试中查看EF Core执行的sql语句,可以使用SQL Studio Manager Tools工具,另一种方式是使用EF Core提供的日志.在ASP.NET Core使用Ent ...

  6. Entity Framework Core 2.1带来更好的SQL语句生成方案

    微软发布了Entity Framework Core2.1,为EF开发者带来了很多期待已久的特性.EF Core 2.1增加了对SQL GROUP BY的支持,支持延迟加载和数据种子等. EF Cor ...

  7. Entity Framework Core 执行SQL语句和存储过程

    无论ORM有多么强大,总会出现一些特殊的情况,它无法满足我们的要求.在这篇文章中,我们介绍几种执行SQL的方法. 表结构 在具体内容开始之前,我们先简单说明一下要使用的表结构. public clas ...

  8. 张高兴的 Entity Framework Core 即学即用:(一)创建第一个 EF Core 应用

    写在前面 Entity Framework Core (EF Core) 是 .NET 平台流行的对象关系映射(ORM)框架.虽然 .NET 平台中 ORM 框架有很多,比如 Dapper.NHibe ...

  9. ASP.NET Core 和 EF Core系列教程——CRUD

    ASP.NET Core 和 EF Core系列教程--CRUD (2 / 10) CRUD 为创建.读取.更新.删除的英文首字母的缩写 作者:Tom Dykstra和Rick Anderson Co ...

最新文章

  1. 第2关:实现一个链接存储的栈
  2. iOS RunLoop 初识
  3. android 字体加下划线,android自定义带下划线EditText解决文字压线的问题
  4. mysql导出document_Mysql导入导出
  5. prometheus + influxdb + grafana + mysql
  6. 需要天天读月月读年年读的书
  7. Delphi 与 DirectX 之 DelphiX(46): TDIB.DoAntiAlias;
  8. python内置模块有哪些_python中那些小众但有用的内置模块
  9. IBM推出可加快响应跨云网络威胁的开放技术 业界首次实现跨安全工具和跨云的搜索威胁功能,无需移动数据
  10. 006-高级语言程序设计C 第六章,高级语言程序设计_C语言(第六章 数组.ppt
  11. java发送文本邮件_1、java实现发送纯文本邮件
  12. 网络拓扑Visio式的定制
  13. PIX防火墙security context配置手册(虚拟防火墙技术)
  14. Golang import 包时可以使用相对路径吗
  15. Gatech OMSCS的申请和学习之奥妙
  16. 【OSPF基础(链路状态路由协议、ospf基础术语、ospf协议报文类型、ospf三大表项、邻居和邻接关系、ospf网络类型、DR与BDR、ospf基本配置)】-20211210、13、14
  17. WiFi密码破解亦或是WiFi热点软件?
  18. “互联网协作如何改变商业未来”文字实录
  19. jsp大学生兼职信息管理系统
  20. Linux学习——vi/vim编辑C程序并运行

热门文章

  1. cannot import name ‘DistanceMetric‘ from ‘sklearn.metrics‘
  2. (译)ABP之Entities
  3. eclipse的中文版本安装方法
  4. Python编辑基础课后习题(持续更新)
  5. 如何把Ai绘画工具放到我们的App中
  6. 计算机文化基础第二次作业-简答题,中传2018年秋计算机文化基础第二次作业-简答题...
  7. 2022年G2电站锅炉司炉操作证考试题库及答案
  8. java中outer:的用法
  9. 企业软文推广应该怎么做,软文写作指导
  10. org.postgresql.util.psqlexception总结