在Abp中执行sql语句
目录
前言
最近使用ABP(ASP.NET Boilerplate)做项目,有些查询(或存储过程)直接使用sql语句会更方便一点。
定义一个接口
在Core项目中定义一个接口,如:ISqlExecuter
public interface ISqlExecuter
{
/// <summary>
/// 执行给定的命令
/// </summary>
/// <param name="sql">命令字符串</param>
/// <param name="parameters">要应用于命令字符串的参数</param>
/// <returns>执行命令后由数据库返回的结果</returns>
int Execute(string sql, params object[] parameters);
/// <summary>
/// 创建一个原始 SQL 查询,该查询将返回给定泛型类型的元素。
/// </summary>
/// <typeparam name="T">查询所返回对象的类型</typeparam>
/// <param name="sql">SQL 查询字符串</param>
/// <param name="parameters">要应用于 SQL 查询字符串的参数</param>
/// <returns></returns>
IQueryable<T> SqlQuery<T>(string sql, params object[] parameters);
}
实现接口
项目中使用的是EF,因此在EntityFramework项目中实现该接口
public class SqlExecuter : ISqlExecuter, ITransientDependency
{
private readonly IDbContextProvider<XXXDbContext> _dbContextProvider;
public SqlExecuter(IDbContextProvider<XXXDbContext> dbContextProvider)
{
_dbContextProvider = dbContextProvider;
}
/// <summary>
/// 执行给定的命令
/// </summary>
/// <param name="sql">命令字符串</param>
/// <param name="parameters">要应用于命令字符串的参数</param>
/// <returns>执行命令后由数据库返回的结果</returns>
public int Execute(string sql, params object[] parameters)
{
return _dbContextProvider.DbContext.Database.ExecuteSqlCommand(sql, parameters);
}
/// <summary>
/// 创建一个原始 SQL 查询,该查询将返回给定泛型类型的元素。
/// </summary>
/// <typeparam name="T">查询所返回对象的类型</typeparam>
/// <param name="sql">SQL 查询字符串</param>
/// <param name="parameters">要应用于 SQL 查询字符串的参数</param>
/// <returns></returns>
public IQueryable<T> SqlQuery<T>(string sql, params object[] parameters)
{
return _dbContextProvider.DbContext.Database.SqlQuery<T>(sql, parameters).AsQueryable<T>();
}
}
使用ITransientDependency接口abp会自动注册。
使用
我们一般会在Application项目中使用。
首先我们需要注入:
使用构造函数的方式注入
private readonly ISqlExecuter _sqlExecuter;
public XXXAppService(ISqlExecuter sqlExecuter)
{
_sqlExecuter = sqlExecuter;
}
使用IocManager注入
var sqlExecuter = IocManager.Instance.Resolve<ISqlExecuter>();
调用
public IEnumerable<OrderChartDto> GetOrderChartData()
{
const string sql = "select * from Orders";
var charts = _sqlExecuter.SqlQuery<OrderChartDto>(sql).ToList();
return charts;
}
值得注意的是,调用代码需要工作单元的支持,Application中已默认支持,可直接使用。但如果在Controller中使用就需要将Action设置为UnitOfWork
[UnitOfWork] public virtual ActionResult GetOrderChartData() { .... }
在Abp中执行sql语句的更多相关文章
- EF中执行sql语句,以及事务
EF to sql string sql = "select T_Task.BSID,T_Task.CloseDate,T_Task.CompleteDate,T_Task.CloseUse ...
- [转]在EntityFramework6中执行SQL语句
本文转自:http://www.cnblogs.com/wujingtao/p/5412329.html 在上一节中我介绍了如何使用EF6对数据库实现CRDU以及事务,我们没有写一句SQL就完成了所有 ...
- 在EntityFramework6中执行SQL语句
在EntityFramework6中执行SQL语句 在上一节中我介绍了如何使用EF6对数据库实现CRDU以及事务,我们没有写一句SQL就完成了所有操作.这一节我来介绍一下如何使用在EF6中执行SQL语 ...
- 在phpmyadmin中执行sql语句出现的错误:Unknown storage engine 'InnoDB'
在phpmyadmin中执行sql语句出现的错误:Unknown storage engine 'InnoDB' 解决方法:解决方法: 1.关闭MySQL数据库 2 ...
- 在EF中执行SQL语句(转载)
在EF中执行SQL语句 你可能要问,我用EF不就为了避免写SQL吗?如果要写SQL我不如直接用ADO.NET得了.话虽然这么说没错,可有些时候使用EF操作数据还是有一些不方便,例如让你根据条件删除 ...
- Shell脚本中执行sql语句操作mysql的5种方法【转】
对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...
- 在EntityFramework6中执行SQL语句【转】
在上一节中我介绍了如何使用EF6对数据库实现CRDU以及事务,我们没有写一句SQL就完成了所有操作.这一节我来介绍一下如何使用在EF6中执行SQL语句. 你可能要问,我用EF不就为了避免写SQL吗?如 ...
- MySQL中执行sql语句错误 Error Code: 1093. You can't specify target table 'car' for update in FROM clause
MySQL中执行sql语句错误 Error Code: 1093. You can't specify target table 'car' for update in FROM clause 201 ...
- Entity Framework中执行Sql语句
如果想在EF框架中执行Sql语句,其实很简单,EF里面已经提供了相关的方法(此处使用的EF为EF4.1版本). EF中提供了两个方法,一个是执行查询的Sql语句SqlQue ...
随机推荐
- Eclipse配置PHP及自动提示功能
Eclipse是一个开发工具,具有强大的插件功能,虽然用于Java理所当然,但为PHP所用,也为尝不可.虽然我一直用的是notepad,但发现开发工具也可以省去一些不必要的记忆. 言归正传,下面就来实 ...
- day10---multiprocess 多进程
multiprocess Queue \ Pipe 只是实现进程间数据的传递 Manager 实现了进程间数据的共享,即多个进程可以修改同一份数据 进程模块 multiprocessing #! ...
- 打开mysql时,提示 1040,Too many connections
打开mysql时,提示 1040,Too many connections,这样就无法打开数据库,看不了表里边的内容了. 出现这个问题的原因是,同时对数据库的连接数过大,mysql默认的最大连接数是1 ...
- CQRS\ES架构介绍
大家好,我叫汤雪华.我平时工作使用Java,业余时间喜欢用C#做点开源项目,如ENode, EQueue.我个人对DDD领域驱动设计.CQRS架构.事件溯源(Event Sourcing,简称ES). ...
- 【吉光片羽】MVC 导出Word的两种方式
1.直接将Html转成Word.MVC自带FileResult很好用.Html中我们也可以嵌入自己的样式. html: <div id="target"> <st ...
- js中的console很强大
今天闲来没事,瞎逛, 发现了淘宝首页的这个: 想起来之前在百度的 页面中也曾看到过.于是乎自己试一试. 于是便见识到了console对象其实很强大,用好它对调试真的有很大帮助. 代码: <!DO ...
- jQuery.width()和jQuery.css('width')的区别
[TOC] 问题描述 使用jQuery修改一个div的宽度时,发现$($0).width('10rem')总是修改成不正确的值,然后使用$($0).css('width', '10rem')时却能正确 ...
- jsp模仿QQ空间说说的发表
1.在文本域中输入文字(可以不添加) 2.点击添加图片(可以不添加) 3.点击发表 4.发表成功,文字和图片是超链接,点击就可以查看全部内容 5.点击图片查看原图,没有图片则不显示查看原图的超链接 主 ...
- Java程序员的日常—— IOUtils总结
以前写文件的复制很麻烦,需要各种输入流,然后读取line,输出到输出流...其实apache.commons.io里面提供了输入流输出流的常用工具方法,非常方便.下面就结合源码,看看IOUTils都有 ...
- 20_学生选课数据库SQL语句练习题1
25.查询95033班和95031班全体学生的记录. select * from STUDENT t,SCORE s where t.sclass=95033 or t.sclass=95031 26 ...