分类:
ABP
一.先在数据库生成一个视图,如下:
二.在ABP程序的Core层创建与数据库里视图所对应的实体如下:
三.在ABP程序的EntityFrameworkCore层下的EntityFrameworkCore文件夹下的seed文件找到xxxDbContext.cs文件,然后在该文件下添加和视图实体相对于的DbQuery<>,如下:
注意:生成视图不用在控制台进行操作。
四.在ABP程序的Core层创建一个接口用来写SQL语句的公共方法(相当于方法的具体框架),如下:
代码:
public interface ISqlExecuter2 { /// <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) where T : class; }
五.在ABP程序的EntityFrameworkCore(基础设施层)层下的EntityFrameworkCore文件夹下的Repositories文件里去实现SQL语句的具体方法,如下:
代码:
public class SqlExecuter2 : ISqlExecuter, ITransientDependency { private readonly IDbContextProvider<TrainingProjectDbContext> _dbContextProvider; //依赖注入 public SqlExecuter2(IDbContextProvider<TrainingProjectDbContext> 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.GetDbContext().Database.ExecuteSqlCommand(sql, parameters); } /// 创建一个原始 SQL 查询,该查询将返回给定泛型类型的元素。 public IQueryable<T> SqlQuery<T>(string sql, params object[] parameters) where T : class { return _dbContextProvider.GetDbContext().Query<T>().FromSql(sql, parameters); } }
六.在Application层对视图进行仓储操作
6.1 Dto如下
6.2 具体的方法实现
代码:
public class V_studentfun:TrainingProjectAppServiceBase { private readonly ISqlExecuter2 _SqlISqlExecuter; //依赖注入 public V_studentfun(ISqlExecuter2 SqlISqlExecuter) { _SqlISqlExecuter = SqlISqlExecuter; } /// 查询方法 public List<V_studentOutDto> GetV_studentlist() { try { var s2 = _SqlISqlExecuter.SqlQuery<V_students>("select * from V_students"); List<V_studentOutDto> Dtolist = new List<V_studentOutDto>(); foreach (var item in s2) { V_studentOutDto Dto = new V_studentOutDto(); Dto.Id = item.Id; Dto.Names = item.Names; Dtolist.Add(Dto); } return Dtolist; } catch (Exception e) { throw new UserFriendlyException("错误信息: " + e.Message + " ---> "); } } }
评价
排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2024TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术