关于在webapi + ef + 视图 + top查询的问题

在ef中使用视图中有一种坑是视图没有主键,表现的形式是有些数据会出现重复,解决的方法是手动在视图中添加主键即可

在实际的项目中碰到另一种坑,即使用webapi查询时的一种,现记录情况如下:

1:随便创建一个视图

create view v_1 as

select id,name,time from table order by field desc

2: 在webapi项目中使用ef链接数据库自动生成v_1的模型

3:编写controller代码

    [EnableQuery]
        public IQueryable<v_1> Get()
        {return EFHelper.Query<v_1>();
        }

4: 前端直接调用接口 localhost:port/api/v_1出现结果

程序到这里一切正常,数据正确返回,并且按照视图中的order by正确排序

现在加上条件查询,top参数如:localhost:port/api/v_1?$top=10,就会发现数据返回的数量正确,但是排序却变了

全部查询时的数据和排序都是正确的,但是加上top后排序就出现错误,那么问题肯定出现在ef框架自动为我们生成的sql中了

调取数据库记录发现执行的sql语句如下:

select  id,name,time from v_1 order by id,name,time limit 10

(其中字段按照字母顺序a-z排序,实际结果可能不是我给出的这样)

开发环境:vs2015 , .net framework 4.5.2 ,ef 5.0 , mysql

网上搜索答案,没有找到相似的问题,由于项目时间原因,先此记录一下,也希望碰到此问题的朋友能提供一个解决方案

最后问题并没有从实际解决,我只是在调用接口的时候,强制加上orderby条件来排序,以保证查询数据的正确性

时间: 2024-10-10 10:55:29

关于在webapi + ef + 视图 + top查询的问题的相关文章

SQL语法精讲(包括建库、建表、建视图、查询、增加、删除、)

SQL语法精讲(包括建库.建表.建视图.查询.增加.删除.修改) SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK) 首先,简要介绍基础语句: 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:

ORA-01219:数据库未打开:仅允许在固定表/视图中查询

好久没有登陆到Oracle的服务器了,把密码都忘记了.sql>conn sys/sys as sysdba;sql>alter user system identified by *;结果出现了ORA-01219:数据库未打开:仅允许在固定表/视图中查询--想要更改密码是遇到了错误?!sql>startup;ORA-01081: 无法启动已在运行的 ORACLE --- 请首先关闭然后再sql>shutdown immediate;sql>startup;--错误依然:在执行

多表和视图联合查询,实现MVM扫描任务详细SOC Case----去重,联合,stuff,触发器赋权

SELECT distinct([faultline].[MVMLive].[vwScan].[JobID])      ,[faultline].[dbo].[Users].Name      ,[faultline].[MVMLive].[vwScan].[ConfigurationName]      ,[faultline].[MVMLive].[vwScan].[StartTime]      ,[faultline].[MVMLive].[vwScan].[EndTime]    

SQL语句--分组的Top查询

代码 SELECT A.* FROM ( SELECT ROW_NUMBER() OVER(PARTITION BY Host ORDER BY Host,count(EntranceURL) DESC) AS ROW, Host, EntranceURL as PageURL ,count(EntranceURL) as EnterTimes ,sum(CASE WHEN IsBounce=1 THEN 1 ELSE 0 END ) AS BounceTimes FROM UserLoyalt

SQL Server索引视图以(物化视图)及索引视图与查询重写

经常听Oracle的同学说起来物化视图,物化视图的作用之一就是可以实现查询重写,听起来有一种高大上的感觉, SQL Server也有类似于Oracle物化视图的功能,只不过叫做索引视图. 说实话,还是物化视图听起来比较合适,与普通视图比,物化视图就是直接将数据存储起来了 SQL Server中的索引视图也具有查询重写的功能, 所谓的查询重写,就是如果符合条件的数据在索引视图上,并且查询列都包含在在索引视图上,此时可以直接通过查询索引视图来替代基于原始表的查询 依旧惯例,先上代码做一个测试环境 -

AngularJs + WebApi + EF + SqlServer 一步一步搭建项目(一)

搭建一个简单的WebAPI项目,当做一个小记录,顺便蹚一下坑,欢迎各种怼. 概要:创建项目目录 一.创建一个空的解决方案 EasyDemo 二.添加一个WebAPI项目到 EasyDemo作为WebUI 三.添加一个类库项目到 EasyDemo作为WebAPI 四.同理 添加一个类库项目到 EasyDemo作为Interface,管理接口 添加一个类库项目到 EasyDemo作为Implement,接口实现类 添加一个类库项目到 EasyDemo作为Entity,管理与数据库的映射 添加一个类库

AngularJs + WebApi + EF + SqlServer 一步一步搭建项目(三)

上一篇,我们完成了对数据库和数据模型的创建,这一篇我们将进行仓储的建立. 概要: 基于DDD(领域驱动设计)的仓储建造Repository和UnitOfWork搭配简单使用. 一.创建上下文 二.创建领域的好伙伴,仓库管理员TRepository 三.创建工作单元 至此,仓储建造完毕.接下来我们将对请求和响应的基础数据结构进行封装. 为什么使用领域驱动设计? Repository是一个独立的层,介于领域层与数据映射层(数据访问层)之间.它的存在让领域层感觉不到数据访问层的存在,它提供一个类似集合

.net core webapi+EF Core

.net core webapi+EF Core 一.描述: EF Core必须下载.net core2.0版本 Micorsoft.EntityFrameworkCore:EF框架的核心包Micorsoft.EntityFrameworkCore.SqlServer:针对SqlServer数据库的扩展,使用SqlServer数据库必须.类似的还有MySql,SqlLite等Micorsoft.EntityFrameworkCore.ToolsMicorosft.EntityFrameworkC

Asp.net WebApi + EF 单元测试架构 DbContext一站到底

其实关于webapi和Ef service的单元测试我以前已经写过相关文章,大家可以参考: Asp.net WebAPI 单元测试 单元测试 mock EF 中DbContext 和DbSet Include 先看一下项目结构图: 这个demo非常简单,UTWebApi.Data 是纯粹的数据定义,UTWebApi.Service是我们的业务服务逻辑层,UTWebApi 是我们webapi的实现,UTWebApi.Tests就是测试项目. 数据层: BloggerDbContext的构造函数一般