EF core的原生SQL查询以及用EF core进行分页查询遇到的问题
在用.net core进行数据库访问,需要处理一些比较复杂的查询,就不得不用原生的SQL查询了,然而EF Core 和EF6 的原生sql查询存在很大的差异。
在EF6中我们用SqlQuery和ExecuteSqlCommand进行sql语句的执行,而在EF Core中我们则使用FromSql和ExecuteSqlCommand
一.ExecuteSqlCommand(这两者没什么太大的区别)
Company08Entities db = new Company08Entities();
string sql = string.Format("update Cars set IsPub='是',PubTime='{1}' where Id in ({0})",ids,DateTime.Now);
int res = db.Database.ExecuteSqlCommand(sql); //返回受影响的行数
if (res>)
{
return Json(new UIResult(true,"发布成功!"));
}
else
{
return Json(new UIResult(false,"发布失败,请重试!"));
}
二.数据库查询语句两者的差别就太大了,这里我会详细举例说明
1.在EF6中使用SqlQuery进行查询以及联和Linq进行分页
Company08Entities db = new Company08Entities();
string sql = "select c.* from Cars c join ResCommend r on c.Id=r.ResId where r.Posld=2 and DeadLine>GETDATE() and c.IsPub='是'";var res = db.Database.SqlQuery<Cars>(sql);
var list = res.Skip((pn - ) * pz).Take(pz).ToList(); //其中pn为页码,pz为页大小
2.在EF Core中我们使用FromSql
private Company08Context db = null;
public ProductController(Company08Context context)
{
this.db = context;
}
String sql =string.Format($"select c.* from Cars c join ResCommend r on c.Id=r.ResId where r.Posld=2 and DeadLine>GETDATE() and c.IsPub='是'"); var res = db.Cars.FromSql(sql); var list = res.Skip((pn-)*pz).Take(pz).ToList();
这中使用 LINQ 运算符在初始的原始 SQL 查询基础上进行组合会出现以下这种问题
这是因为使用 LINQ 运算符在初始的原始 SQL 查询基础上进行组合。 EF Core 将其视为子查询,并在数据库中对其进行组合,导致查询出错
解决方案就是阻止查询运算操作的组合,在 FromSql
方法之后立即使用 AsEnumerable
或 AsAsyncEnumerable
方法,确保 EF Core 不会尝试对存储过程进行组合。
String sql =string.Format($"select c.* from Cars c join ResCommend r on c.Id=r.ResId where r.Posld=2 and DeadLine>GETDATE() and c.IsPub='是'");
var res = db.Cars.FromSql(sql).AsEnumerable();
var list = res.Skip((pn-)*pz).Take(pz).ToList();
EF core的原生SQL查询以及用EF core进行分页查询遇到的问题的更多相关文章
- 防SQL注入:生成参数化的通用分页查询语句
原文:防SQL注入:生成参数化的通用分页查询语句 前些时间看了玉开兄的“如此高效通用的分页存储过程是带有sql注入漏洞的”这篇文章,才突然想起某个项目也是使用了累似的通用分页存储过程.使用这种通用的存 ...
- EF中执行原生sql与使用Local获取本地数据
使用DbSet的Local属性可以访问当前context中被追踪且没有被标记为删除的实体(内存中的数据) using (var context = new BloggingContext()) { / ...
- 在EF中使用原生SQL,首先要创建上下文对象
using (var db = new Entities()) { //数据操作 } 新增 string sql = "insert into UserInfo values('zhangs ...
- JavaWeb分页显示内容之分页查询的三种思路(数据库分页查询)
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6134851.html 在开发过程中,经常做的一件事,也是最基本的事,就是从数据库中查询数据,然后在客户端显示出 ...
- ORACLE中的TOP-N查询(TOP-N分析)、分页查询
TOP-N查询(TOP-N分析):就是获取某一数据集合中的前N条记录,实际应用中经常用到. Oracle中不支持SELECT TOP语句(MySQL中也没用此语句),需要借助ROWNUM伪列来实现TO ...
- 在ABP中通过EF直接执行原生Sql的解决方案
一般情况下,使用EF中的查询语法和方法语法可以帮助我们完成绝大部分业务,但是也有特殊的情况需要直接执行Sql语句.比如,我们的业务过于复杂繁琐,或是有些业务使用EF操作时比较复杂,但是使用Sql时会很 ...
- asp.net EF框架执行原生SQL语句
1.执行无参数sql: string sql = "select * from IntegralInfo where convert(nvarchar,getdate(),23)='{0}' ...
- aspnetboilerplate && .net core 使用原生sql
利用aspnetboilerplate提供的工具类IDbContextProvider private readonly IDbContextProvider<XXXDbContext> ...
- Mybatis 使用Mapper接口的Sql动态代码方式进行CURD和分页查询
1.Maven的pom.xml 2.配置文件 2.1.db.properties 2.2.mybatis.xml 2.3.log4j.xml 3.MybatisUtil工具类 4.Mapper映射文件 ...
随机推荐
- Java代码实现定时器
一 import java.util.Timer; import java.util.TimerTask; public class time { public static void main(St ...
- 201871010124-王生涛 《面向对象程序设计(java)》第八周学习总结
博文正文开头格式:(2分) 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.co ...
- django之cookies,session 、中间件及跨站请求伪造
cookies 和session 为什么会有cookie? 由于http协议是无状态的,即用户访问过后,不留痕迹(状态可以理解为客户端和服务器在某次会话中产生的数据,那无状态的就以为这些数据不会被 ...
- golang和python互相调用
http://blog.yuanzhaoyi.cn/2018/06/27/golang_python.html python3-ctypes: https://docs.python.org/3.5/ ...
- Mysql数据库基础命令
删除一个表: drop table if exists 表名; 在表中插入行: Insert into 表名 values(, , ,) 创建表: Create table 表名( Id int(10 ...
- SPOJ - Triple Sums
[传送门] FFT第一题! 构造多项式 $A(x) = \sum x ^ {s_i}$. 不考虑题目中 $i < j < k$ 的条件,那么 $A^3(x)$ 每一项对应的系数就是答案了. ...
- JAVA基础概念(二)
一.java修饰符和使用场景 修饰符是用来定义类.方法或者变量的访问权限,分为两大类: 访问修饰符: 限定类.属性.方法是否可以被程序里其他部分访问和调用. private<default< ...
- streamsets 官方默认镜像中文支持问题
以前在测试streamsets 的时候就发现中文乱码,后边也每太注意,以为支持问题,今天跑了下单元 测试代码,以及使用本机运行,发现都没有问题,然后运行以前的配置,使用jjs 发现模式的编码为 ANS ...
- 【Step-By-Step】第 三 周
本周面试题一览: 什么是XSS攻击,XSS 攻击可以分为哪几类?我们如何防范XSS攻击? 如何隐藏页面中的某个元素? 浏览器事件代理机制的原理是什么? setTimeout 倒计时为什么会出现误差? ...
- 洛谷P2194 【HXY烧情侣】
首先请允许我吐槽一下这个题面 这个题面透露出血腥与暴力,电影院里还藏汽油 所以情侣们,要是想看电影就在家里看吧 毕竟出来容易被烧 在家里看虽然观影效果不如在电影院里 但是, 起码咱生命安全啥的有保障啊 ...