Entity Framework Core系列教程-23-原生SQL查询
在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查询相关推荐
- Entity Framework Core系列教程-25-Entity Framework Core日志
Entity Framework Core日志 我们经常需要在EF Core中记录SQL并更改跟踪信息以进行调试. EF Core日志记录自动与.NET Core的日志记录机制集成.因此,在隐含使用E ...
- Entity Framework Core系列教程-3为现有数据库生成实体模型
在Entity Framework Core中为现有数据库创建模型 在这里,您将学习如何在Entity Framework Core中为现有数据库创建上下文和实体类.为现有数据库创建实体和上下文类称为 ...
- 手把手引进门之 ASP.NET Core Entity Framework Core(官方教程翻译版 版本3.2.5)
以下是手把手引进门教程,基于 ASP.NET Core, Entity Framework Core ,ABP 框架 创建Web 应用, PS: 自带自动的测试模块哦. 样例下载 (上 github ...
- 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 ...
- 在 .NET Core 中如何让 Entity Framework Core 在日志中记录由 LINQ 生成的SQL语句
在开发中,我们想在调试中查看EF Core执行的sql语句,可以使用SQL Studio Manager Tools工具,另一种方式是使用EF Core提供的日志.在ASP.NET Core使用Ent ...
- Entity Framework Core 2.1带来更好的SQL语句生成方案
微软发布了Entity Framework Core2.1,为EF开发者带来了很多期待已久的特性.EF Core 2.1增加了对SQL GROUP BY的支持,支持延迟加载和数据种子等. EF Cor ...
- Entity Framework Core 执行SQL语句和存储过程
无论ORM有多么强大,总会出现一些特殊的情况,它无法满足我们的要求.在这篇文章中,我们介绍几种执行SQL的方法. 表结构 在具体内容开始之前,我们先简单说明一下要使用的表结构. public clas ...
- 张高兴的 Entity Framework Core 即学即用:(一)创建第一个 EF Core 应用
写在前面 Entity Framework Core (EF Core) 是 .NET 平台流行的对象关系映射(ORM)框架.虽然 .NET 平台中 ORM 框架有很多,比如 Dapper.NHibe ...
- ASP.NET Core 和 EF Core系列教程——CRUD
ASP.NET Core 和 EF Core系列教程--CRUD (2 / 10) CRUD 为创建.读取.更新.删除的英文首字母的缩写 作者:Tom Dykstra和Rick Anderson Co ...
最新文章
- 第2关:实现一个链接存储的栈
- iOS RunLoop 初识
- android 字体加下划线,android自定义带下划线EditText解决文字压线的问题
- mysql导出document_Mysql导入导出
- prometheus + influxdb + grafana + mysql
- 需要天天读月月读年年读的书
- Delphi 与 DirectX 之 DelphiX(46): TDIB.DoAntiAlias;
- python内置模块有哪些_python中那些小众但有用的内置模块
- IBM推出可加快响应跨云网络威胁的开放技术 业界首次实现跨安全工具和跨云的搜索威胁功能,无需移动数据
- 006-高级语言程序设计C 第六章,高级语言程序设计_C语言(第六章 数组.ppt
- java发送文本邮件_1、java实现发送纯文本邮件
- 网络拓扑Visio式的定制
- PIX防火墙security context配置手册(虚拟防火墙技术)
- Golang import 包时可以使用相对路径吗
- Gatech OMSCS的申请和学习之奥妙
- 【OSPF基础(链路状态路由协议、ospf基础术语、ospf协议报文类型、ospf三大表项、邻居和邻接关系、ospf网络类型、DR与BDR、ospf基本配置)】-20211210、13、14
- WiFi密码破解亦或是WiFi热点软件?
- “互联网协作如何改变商业未来”文字实录
- jsp大学生兼职信息管理系统
- Linux学习——vi/vim编辑C程序并运行
热门文章
- cannot import name ‘DistanceMetric‘ from ‘sklearn.metrics‘
- (译)ABP之Entities
- eclipse的中文版本安装方法
- Python编辑基础课后习题(持续更新)
- 如何把Ai绘画工具放到我们的App中
- 计算机文化基础第二次作业-简答题,中传2018年秋计算机文化基础第二次作业-简答题...
- 2022年G2电站锅炉司炉操作证考试题库及答案
- java中outer:的用法
- 企业软文推广应该怎么做,软文写作指导
- org.postgresql.util.psqlexception总结