在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 ...
随机推荐
- Python-变量
1.Python的变量是什么 变量是用来存储计算机程序中的信息,唯一的目的是将数据存储在内存中. 2.Python变量的组成 变量由字母.数字.下划线组成: 变量的第一位不能是数字,可以是字母或下划线 ...
- Mac OS X双系统变回虚拟机
Mac OS X双系统变回虚拟机 自从装了双系统后,感觉不要太好,装了虚拟机就开始有工作的干劲了.不妙的是,我在Win7系统里并没有装office,用不了word文档就写不了笔记和总结.我不太想在Wi ...
- shell脚本调试
转自:http://www.ibm.com/developerworks/cn/linux/l-cn-shell-debug/ 一. 前言 shell编程在unix/linux世界中使用得非常广泛,熟 ...
- 搜索栏css代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- java 上传POJO model jar
打开eclipse----找到要打包的java文件,右键----Export----选择 JAR File 然后NEXT,会让你选择打包的文件,,选择你想打包的,一个或几个.... 在文件选择框的下面 ...
- 【腾许Bugly干货分享】“HTTPS”安全在哪里?
背景 最近基于兴趣学学习了下 HTTPS 相关的知识,在此记录下学习心得. 在上网获取信息的过程中,我们接触最多的信息加密传输方式也莫过于 HTTPS 了.每当访问一个站点,浏览器的地址栏中出现绿色图 ...
- Linux 网络编程(多路复用)
服务器端代码 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<sys/soc ...
- 作业七:团队项目——Alpha版本冲刺阶段-12
今日编写代码如下: class ChessRule { /**卒子的移动规则*/ public void armsRule(int Man,JLabel play,MouseEvent me){ // ...
- 用 C 扩展 python
本文介绍如何用 C 语言来扩展 python.所举的例子是,为 python 添加一个设置字符串到 windows 的剪切板(Clipboard)的功能.我在写以下代码的时候用到的环境是:window ...
- 【转载】关于sql server 代理(已禁用代理xp)
原文地址:http://blog.sina.com.cn/s/blog_493cafbb0100qy91.html 症状: SQL SERVER2005里面,启动SQL代理服务,启动正常,但是在sql ...