(四).netcore+vue 项目搭建——EF底层实现

一、各层公用基类

 

 

IBaseServices.cs

public interface IBaseServices<TEntity> where TEntity : class
    {

        #region Add
        /// <summary>
        /// 新增实体
        /// </summary>
        /// <param name="entity">实体类</param>
        /// <returns></returns>
        Task<TEntity> Add(TEntity entity);
        /// <summary>
        /// 批量新增实体
        /// </summary>
        /// <param name="listEntity">实体集合</param>
        /// <returns>影响行数</returns>
        Task<int> Add(List<TEntity> listEntity);

        #endregion

        #region UPDATE 
        /// <summary>
        /// 更新实体数据
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        Task<bool> Update(TEntity entity);

        /// <summary>
        /// 更新实体的指定字段
        /// </summary>
        /// <param name="model"></param>
        /// <param name="propertyNames"></param>
        /// <returns></returns>
        Task<bool> Update(TEntity model, params string[] propertyNames);

        /// <summary>
        /// 根据表达式查询出来的结果集,批量更新指定字段
        /// </summary>
        /// <param name="model"></param>
        /// <param name="whereLambda"></param>
        /// <param name="modifiedPropertyNames"></param>
        /// <returns></returns>
        Task<bool> Update(TEntity model, Expression<Func<TEntity, bool>> whereLambda, params string[] modifiedPropertyNames);


        #endregion

        #region DELETE

        /// <summary>
        /// 根据实体删除
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        Task<bool> Delete(TEntity entity);
        /// <summary>
        /// 根据表达式条件删除
        /// </summary>
        /// <param name="delWhere"></param>
        /// <returns></returns>
        Task<bool> DeleteBy(Expression<Func<TEntity, bool>> delWhere);


        #endregion


        #region Select 
        /// <summary>
        /// 根据表达式查询,返回单个实体
        /// </summary>
        /// <param name="whereLambda"></param>
        /// <returns></returns>
        Task<TEntity> QueryBy(Expression<Func<TEntity, bool>> whereLambda);
        /// <summary>
        /// 根据表达式查询,返回实体列表
        /// </summary>
        /// <param name="whereLambda"></param>
        /// <returns></returns>
        Task<List<TEntity>> Query(Expression<Func<TEntity, bool>> whereLambda);
        /// <summary>
        /// 返回实体所有列表
        /// </summary>
        /// <returns></returns>
        Task<List<TEntity>> Query();
        #region 排序查询
        /// <summary>
        /// 根据表达式查询,返回实体集合,并按指定排序
        /// </summary>
        /// <typeparam name="TKey"></typeparam>
        /// <param name="whereLambda"></param>
        /// <param name="orderLambda"></param>
        /// <param name="isAsc"></param>
        /// <returns></returns>
        Task<List<TEntity>> Query<TKey>(Expression<Func<TEntity, bool>> whereLambda, Expression<Func<TEntity, TKey>> orderLambda, bool isAsc = true);


        /// <summary>
        /// 根据表达式查询,返回实体集合,并按指定排序返回指定行数
        /// </summary>
        /// <typeparam name="TKey"></typeparam>
        /// <param name="whereLambda"></param>
        /// <param name="top"></param>
        /// <param name="orderLambda"></param>
        /// <param name="isAsc"></param>
        /// <returns></returns>
        Task<List<TEntity>> Query<TKey>(Expression<Func<TEntity, bool>> whereLambda, int top, Expression<Func<TEntity, TKey>> orderLambda, bool isAsc = true);


        #endregion

        #region 分页查询
        /// <summary>
        /// 按表达式分页查询,并按指定排序,返回实体集合
        /// </summary>
        /// <typeparam name="TKey"></typeparam>
        /// <param name="whereLambda"></param>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <param name="orderByLambda"></param>
        /// <param name="isAsc"></param>
        /// <returns></returns>
        Task<List<TEntity>> Query<TKey>(Expression<Func<TEntity, bool>> whereLambda, int pageIndex, int pageSize, Expression<Func<TEntity, TKey>> orderByLambda, bool isAsc = true);


        /// <summary>
        /// 按表达式分页查询,并按指定排序,返回分页实体
        /// </summary>
        /// <typeparam name="TKey"></typeparam>
        /// <param name="whereLambda"></param>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <param name="orderByLambda"></param>
        /// <param name="isAsc"></param>
        /// <returns></returns>
        Task<PageModel<TEntity>> QueryPage<TKey>(Expression<Func<TEntity, bool>> whereLambda, int pageIndex, int pageSize, Expression<Func<TEntity, TKey>> orderByLambda, bool isAsc = true);


        #endregion

        #endregion


        #region ORTHER
        /// <summary>
        /// 执行存储过程 exec Proc_ @name,返回实体集合
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="parms"></param>
        /// <param name="cmdType"></param>
        /// <returns></returns>
        Task<List<TEntity>> Query(string sql, List<SqlParameter> parms, CommandType cmdType = CommandType.Text);


        /// <summary>
        ///  执行存储过程 exec Proc_ @name,返回影响行数
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="parms"></param>
        /// <param name="cmdType"></param>
        /// <returns></returns>
        Task<int> Execute(string sql, List<SqlParameter> parms, CommandType cmdType = CommandType.Text);


        #endregion ORTHER
    }
View Code

 

BaseServices.cs

public class BaseServices<TEntity> : IBaseServices<TEntity> where TEntity : class, new()
    {
       
        public IBaseDao<TEntity> BaseDal;

        public BaseServices(IBaseDao<TEntity> dal)
        {
            this.BaseDal = dal;
        }

        #region Add
       
        public async Task<TEntity> Add(TEntity entity)
        {
            return await BaseDal.Add(entity);
        }
        public async Task<int> Add(List<TEntity> listEntity)
        {
            return await BaseDal.Add(listEntity);
        }

        #endregion

        #region UPDATE 
        
        public async Task<bool> Update(TEntity entity)
        {
            return await BaseDal.Update(entity);
        }

        public async Task<bool> Update(TEntity model, params string[] propertyNames)
        {
            return await BaseDal.Update(model, propertyNames);
        }

        public async Task<bool> Update(TEntity model, Expression<Func<TEntity, bool>> whereLambda, params string[] modifiedPropertyNames)
        {

            return await BaseDal.Update(model, whereLambda, modifiedPropertyNames);
        }


        #endregion

        #region DELETE
      
        public async Task<bool> Delete(TEntity entity)
        {
            return await BaseDal.Delete(entity);
        }
        
        public async Task<bool> DeleteBy(Expression<Func<TEntity, bool>> delWhere)
        {
            return await BaseDal.DeleteBy(delWhere);
        }

        #endregion


        #region Select 

        public async Task<TEntity> QueryBy(Expression<Func<TEntity, bool>> whereLambda)
        {
            return await BaseDal.QueryBy(whereLambda);
        }

        public async Task<List<TEntity>> Query(Expression<Func<TEntity, bool>> whereLambda)
        {
            return await BaseDal.Query(whereLambda);
        }

        public async Task<List<TEntity>> Query()
        {
            return await BaseDal.Query();
        }


        #region 排序查询
        public async Task<List<TEntity>> Query<TKey>(Expression<Func<TEntity, bool>> whereLambda, Expression<Func<TEntity, TKey>> orderLambda, bool isAsc = true)
        {
            return await BaseDal.Query(whereLambda, orderLambda, isAsc);
        }



        public async Task<List<TEntity>> Query<TKey>(Expression<Func<TEntity, bool>> whereLambda, int top, Expression<Func<TEntity, TKey>> orderLambda, bool isAsc = true)
        {
            return await BaseDal.Query(whereLambda, top, orderLambda, isAsc);
        }

        #endregion

        #region 分页查询

        public async Task<List<TEntity>> Query<TKey>(Expression<Func<TEntity, bool>> whereLambda, int pageIndex, int pageSize, Expression<Func<TEntity, TKey>> orderByLambda, bool isAsc = true)
        {
            return await BaseDal.Query(whereLambda, pageIndex, pageSize, orderByLambda, isAsc);
        }


        public async Task<PageModel<TEntity>> QueryPage<TKey>(Expression<Func<TEntity, bool>> whereLambda, int pageIndex, int pageSize, Expression<Func<TEntity, TKey>> orderByLambda, bool isAsc = true)
        {
            return await BaseDal.QueryPage(whereLambda, pageIndex, pageSize, orderByLambda, isAsc);
        }


        #endregion

        #endregion

        #region ORTHER

       
        public async Task<List<TEntity>> Query(string sql, List<SqlParameter> parms, CommandType cmdType = CommandType.Text)
        {
            return await BaseDal.Query(sql, parms, cmdType);

        }
       
        public async Task<int> Execute(string sql, List<SqlParameter> parms, CommandType cmdType = CommandType.Text)
        {
            return await BaseDal.Execute(sql, parms, cmdType);
        }


        #endregion ORTHER
    }
View Code

 

IBaseDao.cs

public interface IBaseDao<TEntity> where TEntity : class
    {

        #region Add
        Task<TEntity> Add(TEntity entity);

        Task<int> Add(List<TEntity> listEntity);

        #endregion

        #region UPDATE 
        Task<bool> Update(TEntity entity);

        Task<bool> Update(TEntity model, params string[] propertyNames);

        Task<bool> Update(TEntity model, Expression<Func<TEntity, bool>> whereLambda, params string[] modifiedPropertyNames);


        #endregion

        #region DELETE


        Task<bool> Delete(TEntity entity);

        Task<bool> DeleteBy(Expression<Func<TEntity, bool>> delWhere);


        #endregion


        #region Select 
       
        Task<TEntity> QueryBy(Expression<Func<TEntity, bool>> whereLambda);
        
        Task<List<TEntity>> Query(Expression<Func<TEntity, bool>> whereLambda);
       
        Task<List<TEntity>> Query();
        #region 排序查询
        
        Task<List<TEntity>> Query<TKey>(Expression<Func<TEntity, bool>> whereLambda, Expression<Func<TEntity, TKey>> orderLambda, bool isAsc = true);


       
        Task<List<TEntity>> Query<TKey>(Expression<Func<TEntity, bool>> whereLambda, int top, Expression<Func<TEntity, TKey>> orderLambda, bool isAsc = true);


        #endregion

        #region 分页查询
       
        Task<List<TEntity>> Query<TKey>(Expression<Func<TEntity, bool>> whereLambda, int pageIndex, int pageSize, Expression<Func<TEntity, TKey>> orderByLambda, bool isAsc = true);

       

        Task<PageModel<TEntity>> QueryPage<TKey>(Expression<Func<TEntity, bool>> whereLambda, int pageIndex, int pageSize, Expression<Func<TEntity, TKey>> orderByLambda, bool isAsc = true);


        #endregion

        #endregion


        #region ORTHER

       
        Task<List<TEntity>> Query(string sql, List<SqlParameter> parms, CommandType cmdType = CommandType.Text);

        
        Task<int> Execute(string sql, List<SqlParameter> parms, CommandType cmdType = CommandType.Text);


        #endregion ORTHER
    }
View Code

 

BaseDao.cs

public class BaseDao<TEntity> : IBaseDao<TEntity> where TEntity : class, new()
    {
        private BaseCoreContext _db;

        public BaseDao(BaseCoreContext mydbcontext)
        {
            this._db = mydbcontext as BaseCoreContext;
        }

        #region Add
        /// <summary>
        /// 新增实体
        /// </summary>
        /// <param name="entity">实体类</param>
        /// <returns></returns>
        public async Task<TEntity> Add(TEntity entity)
        {
            _db.Set<TEntity>().Add(entity);
            await _db.SaveChangesAsync();
            return entity;
        }

        /// <summary>
        /// 批量新增实体
        /// </summary>
        /// <param name="listEntity">实体集合</param>
        /// <returns>影响行数</returns>
        public async Task<int> Add(List<TEntity> listEntity)
        {
            await _db.Set<TEntity>().AddRangeAsync(listEntity);
            return await _db.SaveChangesAsync();
        }

        #endregion

        #region UPDATE 
        /// <summary>
        /// 更新实体数据
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public async Task<bool> Update(TEntity entity)
        {
            _db.Set<TEntity>().Update(entity);
            return await _db.SaveChangesAsync() > 0;
        }

        /// <summary>
        /// 更新实体的指定字段
        /// </summary>
        /// <param name="model"></param>
        /// <param name="propertyNames"></param>
        /// <returns></returns>
        public async Task<bool> Update(TEntity model, params string[] propertyNames)
        {            
            EntityEntry entry = _db.Entry<TEntity>(model);            
            entry.State = EntityState.Unchanged;            
            foreach (string propertyName in propertyNames)
            {                
                entry.Property(propertyName).IsModified = true;
            }
            return await _db.SaveChangesAsync() > 0;
        }

        /// <summary>
        /// 根据表达式查询出来的结果集,批量更新指定字段
        /// </summary>
        /// <param name="model"></param>
        /// <param name="whereLambda"></param>
        /// <param name="modifiedPropertyNames"></param>
        /// <returns></returns>
        public async Task<bool> Update(TEntity model, Expression<Func<TEntity, bool>> whereLambda, params string[] modifiedPropertyNames)
        {
            List<TEntity> listModifing = _db.Set<TEntity>().Where(whereLambda).ToList();            
            Type t = typeof(TEntity);            
            List<PropertyInfo> propertyInfos = t.GetProperties(BindingFlags.Instance | BindingFlags.Public).ToList();            
            Dictionary<string, PropertyInfo> dicPropertys = new Dictionary<string, PropertyInfo>();            
            propertyInfos.ForEach(p =>
            {
                if (modifiedPropertyNames.Contains(p.Name))
                {
                    dicPropertys.Add(p.Name, p);
                }
            });            
            foreach (string propertyName in modifiedPropertyNames)
            {                
                if (dicPropertys.ContainsKey(propertyName))
                {                   
                    PropertyInfo proInfo = dicPropertys[propertyName];                    
                    object newValue = proInfo.GetValue(model, null);                    
                    foreach (TEntity item in listModifing)
                    {                        
                        proInfo.SetValue(item, newValue, null);
                    }
                }
            }
           
            return await _db.SaveChangesAsync() > 0;
        }


        #endregion

        #region DELETE
        
        /// <summary>
        /// 根据实体删除
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public async Task<bool> Delete(TEntity entity)
        {
            _db.Set<TEntity>().Attach(entity);
            _db.Set<TEntity>().Remove(entity);
            return await _db.SaveChangesAsync() > 0;
        }

        /// <summary>
        /// 根据表达式条件删除
        /// </summary>
        /// <param name="delWhere"></param>
        /// <returns></returns>
        public async Task<bool> DeleteBy(Expression<Func<TEntity, bool>> delWhere)
        {
            
            List<TEntity> listDeleting = _db.Set<TEntity>().Where(delWhere).ToList();            
            listDeleting.ForEach(u =>
            {
                _db.Set<TEntity>().Attach(u);  
                _db.Set<TEntity>().Remove(u); 
            });            
            return await _db.SaveChangesAsync() > 0;
        }



        #endregion


        #region Select 

        /// <summary>
        /// 根据表达式查询,返回单个实体
        /// </summary>
        /// <param name="whereLambda"></param>
        /// <returns></returns>
        public async Task<TEntity> QueryBy(Expression<Func<TEntity, bool>> whereLambda)
        {
            return await _db.Set<TEntity>().Where(whereLambda).AsNoTracking().FirstOrDefaultAsync();
        }
        /// <summary>
        /// 根据表达式查询,返回实体列表
        /// </summary>
        /// <param name="whereLambda"></param>
        /// <returns></returns>
        public async Task<List<TEntity>> Query(Expression<Func<TEntity, bool>> whereLambda)
        {
            return await _db.Set<TEntity>().Where(whereLambda).AsNoTracking().ToListAsync();
        }

        /// <summary>
        /// 返回实体所有列表
        /// </summary>
        /// <returns></returns>
        public async Task<List<TEntity>> Query()
        {
            return await _db.Set<TEntity>().AsNoTracking().ToListAsync();
        }


        #region 排序查询
        /// <summary>
        /// 根据表达式查询,返回实体集合,并按指定排序
        /// </summary>
        /// <typeparam name="TKey"></typeparam>
        /// <param name="whereLambda"></param>
        /// <param name="orderLambda"></param>
        /// <param name="isAsc"></param>
        /// <returns></returns>
        public async Task<List<TEntity>> Query<TKey>(Expression<Func<TEntity, bool>> whereLambda, Expression<Func<TEntity, TKey>> orderLambda, bool isAsc = true)
        {
            if (isAsc)
            {
                return await _db.Set<TEntity>().Where(whereLambda).OrderBy(orderLambda).AsNoTracking().ToListAsync();
            }
            else
            {
                return await _db.Set<TEntity>().Where(whereLambda).OrderByDescending(orderLambda).AsNoTracking().ToListAsync();
            }
        }


        /// <summary>
        /// 根据表达式查询,返回实体集合,并按指定排序返回指定行数
        /// </summary>
        /// <typeparam name="TKey"></typeparam>
        /// <param name="whereLambda"></param>
        /// <param name="top"></param>
        /// <param name="orderLambda"></param>
        /// <param name="isAsc"></param>
        /// <returns></returns>
        public async Task<List<TEntity>> Query<TKey>(Expression<Func<TEntity, bool>> whereLambda, int top, Expression<Func<TEntity, TKey>> orderLambda, bool isAsc = true)
        {
            if (isAsc)
            {
                return await _db.Set<TEntity>().Where(whereLambda).OrderBy(orderLambda).Take(top).AsNoTracking().ToListAsync();
            }
            else
            {
                return await _db.Set<TEntity>().Where(whereLambda).OrderByDescending(orderLambda).Take(top).AsNoTracking().ToListAsync();
            }
        }

        #endregion

        #region 分页查询

        /// <summary>
        /// 按表达式分页查询,并按指定排序,返回实体集合
        /// </summary>
        /// <typeparam name="TKey"></typeparam>
        /// <param name="whereLambda"></param>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <param name="orderByLambda"></param>
        /// <param name="isAsc"></param>
        /// <returns></returns>
        public async Task<List<TEntity>> Query<TKey>(Expression<Func<TEntity, bool>> whereLambda, int pageIndex, int pageSize, Expression<Func<TEntity, TKey>> orderByLambda, bool isAsc = true)
        {
            if (isAsc)
            {
                return await _db.Set<TEntity>().Where(whereLambda).OrderBy(orderByLambda).Skip((pageIndex - 1) * pageSize).Take(pageSize).AsNoTracking().ToListAsync();
            }
            else
            {
                return await _db.Set<TEntity>().Where(whereLambda).OrderByDescending(orderByLambda).Skip((pageIndex - 1) * pageSize).Take(pageSize).AsNoTracking().ToListAsync();
            }
        }

        /// <summary>
        /// 按表达式分页查询,并按指定排序,返回分页实体
        /// </summary>
        /// <typeparam name="TKey"></typeparam>
        /// <param name="whereLambda"></param>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <param name="orderByLambda"></param>
        /// <param name="isAsc"></param>
        /// <returns></returns>
        public async Task<PageModel<TEntity>> QueryPage<TKey>(Expression<Func<TEntity, bool>> whereLambda, int pageIndex, int pageSize, Expression<Func<TEntity, TKey>> orderByLambda, bool isAsc = true)
        {
            var rowCount = await _db.Set<TEntity>().Where(whereLambda).CountAsync();
            
            int pageCount = (Math.Ceiling(rowCount.ObjToDecimal() / pageSize.ObjToDecimal())).ObjToInt();

            List<TEntity> list = null;

            if (isAsc)
            {
                list = await _db.Set<TEntity>().OrderBy(orderByLambda).Where(whereLambda).Skip((pageIndex - 1) * pageSize).Take(pageSize).AsNoTracking().ToListAsync();
            }
            else
            {
                list = await _db.Set<TEntity>().OrderByDescending(orderByLambda).Where(whereLambda).Skip((pageIndex - 1) * pageSize).Take(pageSize).AsNoTracking().ToListAsync();
            }

            return new PageModel<TEntity>() { dataCount = rowCount, pageCount = pageCount, page = pageIndex, PageSize = pageSize, data = list };
        }


        #endregion

        #endregion

        #region ORTHER

        /// <summary>
        /// 执行存储过程 exec Proc_ @name,返回实体集合
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="parms"></param>
        /// <param name="cmdType"></param>
        /// <returns></returns>
        public async Task<List<TEntity>> Query(string sql, List<SqlParameter> parms, CommandType cmdType = CommandType.Text)
        {            
            if (cmdType == CommandType.StoredProcedure)
            {
                StringBuilder paraNames = new StringBuilder();
                foreach (var sqlPara in parms)
                {
                    paraNames.Append($" @{sqlPara},");
                }
                sql = paraNames.Length > 0 ? $"exec {sql} {paraNames.ToString().Trim(',')}" : $"exec {sql} ";
            }

            return await _db.Set<TEntity>().FromSqlRaw(sql).ToListAsync();

        }


        /// <summary>
        ///  执行存储过程 exec Proc_ @name,返回影响行数
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="parms"></param>
        /// <param name="cmdType"></param>
        /// <returns></returns>
        public async Task<int> Execute(string sql, List<SqlParameter> parms, CommandType cmdType = CommandType.Text)
        {
            if (cmdType == CommandType.StoredProcedure)
            {
                StringBuilder paraNames = new StringBuilder();
                foreach (var sqlPara in parms)
                {
                    paraNames.Append($" @{sqlPara},");
                }
                sql = paraNames.Length > 0 ?
                    $"exec {sql} {paraNames.ToString().Trim(',')}" :
                    $"exec {sql} ";
            }

            int ret = await _db.Database.ExecuteSqlRawAsync(sql, parms.ToArray());
            return 0;
        }


        #endregion ORTHER

    }
View Code

 

二、以角色操作为例

新建 RoleController

 /// <summary>
    /// 角色管理
    /// </summary>
    [Route("api/[controller]/[action]")]
    [ApiController]
    public class RoleController : ControllerBase
    {
        IBaseServices<SysRole> _roleServices;
        public RoleController(BaseCoreContext mydbcontext)
        {
            _roleServices = new BaseServices<SysRole>(new BaseDao<SysRole>(mydbcontext));
        }
       
        [HttpGet]
        public async Task<MessageModel<PageModel<SysRole>>> Get(int page = 1, string key = "")
        {
            if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key))
            {
                key = "";
            }
            int intPageSize = 50;
            var data = await _roleServices.QueryPage(a => a.IsDeleted != true && (a.RoleName != null && a.RoleName.Contains(key)), page, intPageSize, a => a.Id, false);

            return new MessageModel<PageModel<SysRole>>()
            {
                msg = "获取成功",
                success = data.dataCount >= 0,
                response = data
            };

        }
    
        [HttpPost]
        public async Task<MessageModel<string>> Post([FromBody] SysRole role)
        {
            var data = new MessageModel<string>();
            var m = (await _roleServices.Add(role));
            data.success = m.Id > 0;
            if (data.success)
            {
                data.response = m.Id.ObjToString();
                data.msg = "添加成功";
            }
            return data;
        }

  
        [HttpPut]
        public async Task<MessageModel<string>> Put([FromBody] SysRole role)
        {
            var data = new MessageModel<string>();
            if (role != null && role.Id > 0)
            {
                data.success = await _roleServices.Update(role);
                if (data.success)
                {
                    data.msg = "更新成功";
                }
            }
            return data;
        }

       
        [HttpDelete]
        public async Task<MessageModel<string>> Delete(int id)
        {
            var data = new MessageModel<string>();
            if (id > 0)
            {
                var model = await _roleServices.QueryBy(a => a.Id == id);
                model.IsDeleted = true;
                data.success = await _roleServices.Update(model);
                if (data.success)
                {
                    data.msg = "删除成功";
                }
            }
            return data;
        }
    }
View Code

 

项目运行起来,测试新增一个角色

 

 

结果成功!

 

 

 

 

 

三、实例化

RoleController的构造函数的参数BaseCoreContext的实例是如何传进来的呢?前面Startup里的services.AddDbContextPool已经实现了注入

RoleController的构造函数里,手动实例化了两个对象,下一章学习依赖注入,由容器来实现实例化,构造函数里只需要注入实例即可使用。

_roleServices = new BaseServices<SysRole>(new BaseDao<SysRole>(mydbcontext));

 

posted @ 2021-04-20 21:00  倪努力  阅读(655)  评论(0)    收藏  举报