在EF中使用SQL执行简单高效的增删查操作

简介: 随着平台数据的积累,对于数据访问的速度要求愈来愈高。优化后台访问性能,将是之后的一个重点任务。但是,后台在项目开发初期采用的是Abp(Lite DDD)框架,集成EnityFramework。因为之前的项目经验有用过EF,对于开发者编码来说,着实高效。

随着平台数据的积累,对于数据访问的速度要求愈来愈高。优化后台访问性能,将是之后的一个重点任务。

但是,后台在项目开发初期采用的是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挺爽的。看来后台性能优化又多了条路子。

 

墨匠
目录
相关文章
|
2月前
|
SQL 数据库 数据安全/隐私保护
【操作宝典】SQL巨擘:掌握SQL Server Management的终极秘籍!
【操作宝典】SQL巨擘:掌握SQL Server Management的终极秘籍!
61 0
|
5月前
|
SQL BI 数据库
达梦(DM) SQL日期操作及分析函数
讲述DM 数据库中如何实现各种日期相关的运算以及如何利用分析函数 lead() over() 进行范围问题的处理
|
5月前
|
SQL Serverless 数据库
|
5月前
|
SQL Java 数据库连接
MyBatis动态SQL多表操作
MyBatis动态SQL多表操作
|
4月前
|
SQL 分布式计算 数据库
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
98 0
|
6月前
|
SQL 关系型数据库 MySQL
Python 与 MySQL 进行增删改查的操作以及防止SQL注入
Python 与 MySQL 进行增删改查的操作以及防止SQL注入
132 0
|
3月前
|
SQL Oracle 关系型数据库
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
88 0
|
1月前
|
SQL 安全 数据库
第三章用sql语句操作数据
第三章用sql语句操作数据
10 0
|
1月前
|
SQL druid Java
【MyBatis】2、MyBatis 的动态 SQL 和增删改操作
【MyBatis】2、MyBatis 的动态 SQL 和增删改操作
29 0
|
6月前
|
SQL 缓存 大数据
大数据技术之Clickhouse---入门篇---SQL操作、副本
大数据技术之Clickhouse---入门篇---SQL操作、副本