在EF中使用SQL执行简单高效的增删查操作
随着平台数据的积累,对于数据访问的速度要求愈来愈高。优化后台访问性能,将是之后的一个重点任务。
但是,后台在项目开发初期采用的是Abp(Lite DDD)框架,集成EnityFramework。因为之前的项目经验有用过EF,对于开发者编码来说,着实高效。但是之前所处传统行业,对于数据访问的性能要求并不高。因此也就没有在意EF的性能问题。然后,有句话叫做“出来混,早晚要还的”。这不,现在的Web项目对于数据访问性能有些吃力了,尤其是涉及使用Linq拼写出的组合查询且数据量大时,查询速度慢了下来。
最近也是在一边完成新功能的开发,一边通过优化语法进而优化查询速度。但是,这两天后台仓储层调用自带Api查询数据的奇葩表现令我甚是无奈。在新功能(使用websocket实时推动数据)的界面中,调用后台一个查询设备信息的接口,死活查不到实体数据。然后,调用同样的接口在其他界面却可以实现。不禁令我对该框架产生了很大的疑惑,Why?
不过现在的主要任务是尽快交付功能,我把问题记下了。
为了实现在当前界面调用查询设备信息的接口可以查到数据,我注释掉了Services层对Repository层的调用Abp.EnityFramework自带的API查询数据,改用组织SQL语句执行查询、删除、新增。结果则是正常的可以得到你想要的数据。不禁感慨啊,那些个ORM不是万能的,纯碎的Sql是那么的简单高效。
下面贴出EF中使用SQL执行查询、删除及新增的用法:
A,查询,
var parameter = new SqlParameter("@DeviceId", id);
var sqlDeviceInfo = string.Format(@"Select * from dbo.DeviceInfos where dbo.DeviceInfos.Id=@DeviceId");
var deviceInfo = await Context.Database.SqlQuery<DeviceInfo>(sqlDeviceInfo, new SqlParameter("@DeviceId", id)).FirstOrDefaultAsync();
B。删除
var deviceIdParamter = new SqlParameter("@DeviceId", deviceId);
var sqlDeleteId = string.Format(@"Delete from dbo.DeviceAndHiddenTroubleLinks where DeviceId=@DeviceId");
var result = await Context.Database.ExecuteSqlCommandAsync(sqlDeleteId, deviceIdParamter);
C、新增
var sqlAddId = string.Format(@"Insert into dbo.DeviceAndHiddenTroubleLinks(DeviceId,DeviceHiddenTrouble_Id) values (@DeviceId,@HiddenTroubleId)");
foreach (var hiddenTroubleId in deviceHiddenTroubleIds)
{
var deviceIdAndHiddenTroubleIdParamter = new DbParameter[] { new SqlParameter { ParameterName = "DeviceId", Value = deviceId }, new SqlParameter { ParameterName = "HiddenTroubleId", Value = hiddenTroubleId } };
await Context.Database.ExecuteSqlCommandAsync(sqlAddId, deviceIdAndHiddenTroubleIdParamter);
}
改完之后发现,直接使用SQL挺爽的。看来后台性能优化又多了条路子。
在EF中使用SQL执行简单高效的增删查操作的更多相关文章
- nodejs链接mysql数据库,执行简单的增删改查操作
var mysql = require('mysql'); var conn = mysql.createConnection({ host: 'localhost', user: 'root', p ...
- easyui datagrid 禁止选中行 EF的增删改查(转载) C# 获取用户IP地址(转载) MVC EF 执行SQL语句(转载) 在EF中执行SQL语句(转载) EF中使用SQL语句或存储过程 .net MVC使用Session验证用户登录 PowerDesigner 参照完整性约束(转载)
easyui datagrid 禁止选中行 没有找到可以直接禁止的属性,但是找到两个间接禁止的方式. 方式一: //onClickRow: function (rowIndex, rowData) ...
- .NET在EF中使用sql,用动态类吧!
.NET在EF中使用sql,用动态类吧! 前言 在.NET中使用Entity Framework能快速.方便地结合LINQ来对数据库进行一系列的增删改查操作.但是由于EF根据表达式最后生成通用的sql ...
- EF中使用SQL语句或存储过程
EF中使用SQL语句或存储过程 1.无参数查询var model = db.Database.SqlQuery<UserInfo>("select* from UserInfoe ...
- C#+Access 员工信息管理--简单的增删改查操作和.ini配置文件的读写操作。
1.本程序的使用的语言是C#,数据库是Access2003.主要是对员工信息进行简单的增删改查操作和对.ini配置文件的读写操作. 2.代码运行效果如下: 功能比较简单.其中在得到查询结果后,在查询结 ...
- python3.6 使用 pymysql 连接 Mysql 数据库及 简单的增删改查操作
1.通过 pip 安装 pymysql 进入 cmd 输入 pip install pymysql 回车等待安装完成: 安装完成后出现如图相关信息,表示安装成功. 2.测试连接 import ...
- 【OF框架】新建库表及对应实体,并实现简单的增删改查操作,封装操作标准WebApi
准备 搭建好项目框架及数据库,了解框架规范. 1.数据库表和实体一一对应,表名实体名名字相同,用小写,下划线连接.字段名用驼峰命名法,首字母大写. 2.实体放在Entities目录下,继承Entity ...
- plsql中查看sql执行计划
想要优化sql语句,可以从sql执行计划入手. 在plsql客户端,提供了一个方便的按钮来查看执行计划 选中需要查看的sql语句,点击此按钮,就可以看到该条语句的执行计划了. 结果集包括描述,用户,对 ...
- SQLite在Android程序中的使用方法,SQLite的增删查改方法
Sqlite: 1.一款用来实现本地数据存储的轻量级数据管理工具,是众多用来实现数据库管理的工具之一. 2.Android已经将SQLite的代码功能吸收在它的系统中,我们可以直接在Android程序 ...
随机推荐
- Java基础--Java基本数据类型
一.基本数据类型(primitive type) (1)数值型 1.数值型包括整数类型(byte,short,int,long) a.byte :1字节=8bit位 (-128~127) 包装类: ...
- Git将文件上传至Github过程
1.安装Git工具(在这里就不多说了) 2.我们需要先创建一个本地的版本库(其实也就是一个文件夹). 你可以直接在桌面右击新建文件夹,也可以右击打开Git bash命令行窗口通过命令来创建. 现在我通 ...
- 关于在elasticSearch中使用聚合查询后只显示10个bucket的问题
先看下面es查询语句 { "size": 0, "aggs" : { "all_articleId" : { "terms&quo ...
- Springboot与Maven多环境配置文件夹解决方案
Profile用法 我们在application.yml中为jdbc.name赋予一个值,这个值为一个变量 jdbc: username: ${jdbc.username} Maven中的profil ...
- Androidstudio实现一个简易的加法器——分享两种方法实现(日常作业练习)
Androidstudio实现一个简易的加法器——分享两种方法实现(日常作业练习) ...
- JAVA生成EXCEL模板
JAVA生成excel模板,支持1.必填字段前加 红色 * 2.定义可选值下拉列表 valList3.定义名称并通过名称设置可选值 refName(名称在sheet2,sheet2自动隐藏)4.支持设 ...
- Simulink仿真入门到精通(十四) Simulink自定义环境
14.1 Simulink环境自定义功能 sl_sustomization.m函数是Simulink提供给用户使用MATLAB语言自定义Simulink标准人机界面的函数机制.若sl_sustomiz ...
- Topshelf+Quartz3.0基于控制台应用程序快速开发可调度windows服务
1.TopShelf TopShelf是一个开源的跨平台的宿主服务框架.可通过.Net Core/.Net Framwork控制台应用程序快速开发windows服务,更加便于服务调试. 本文基于.Ne ...
- [极客大挑战 2019]BabySQL 1
考点就是一系列的sql注入操作 和 replace函数过滤 进入页面如图 基础过滤测试 union .select .information_schema试试有没有被过滤 ?username=ad ...
- 推荐一款优秀的web自动化测工具
在业务使用的自动化测试工具很多.有开源的,有商业化的,各有各得特色,各有各得优点!下面我就介绍几个我用过的一款非常优秀的国产自动化测试工具.在现有的自动化软件当中,都是以元素的name.id.xpat ...