在Abp中执行sql语句
来源:互联网 发布:js array concat 编辑:程序博客网 时间:2024/06/05 08:15
目录
前言
最近使用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() { .... }
0 0
- 在Abp中执行sql语句
- 执行sql 语句(在C++中执行)
- 在ABP中通过EF直接执行原生Sql的解决方案
- 在Sql中执行动态Sql语句
- 在nhibernate中执行SQL语句
- 在nhibernate中执行SQL语句
- 在NHibernate中执行SQL语句
- 在Access查询中执行SQL语句
- 怎样在Access中执行sql语句。
- 在NHibernate中执行SQL语句
- 在Access中执行SQL语句
- 在RMAN中执行SQL语句
- 在vb6.0中执行sql语句
- 在事务中执行sql语句
- 如何在Eclipse中执行SQL语句?
- 在eclipse中怎么执行sql语句
- 在 MySQL 数据库中使用 C 执行 SQL 语句
- [转] 在 MySQL 数据库中使用 C 执行 SQL语句
- 软件测试划分
- Nginx缓存的基本思路
- Java NIO FileChannel
- How to debug ABAP Web services from Microsoft Visual Studio
- android 使用Handler.postDelayed方法实现循环执行定时任务
- 在Abp中执行sql语句
- 特征值与特征向量
- cuda中warp分支及执行
- shell printf命令:格式化输出语句
- Linux 文件系统剖析
- Android 通过module进行开发
- PHP实现自己的验证码(实例)
- Jenkins+Docker搭建持续集成测试环境
- hdu 5606 tree(并查集)