1. 程式人生 > 實用技巧 >【.Net Core從零開始前後端分離】(六)——泛型基類非同步程式設計

【.Net Core從零開始前後端分離】(六)——泛型基類非同步程式設計

前言

這一章節學習一下泛型基類的搭建以及非同步程式設計

構建各分層的基類

1、在Blog.Core.IRepository 層中新增BASE資料夾,並新增介面 IBaseRepository.cs

   public interface IBaseRepository<TEntity> where TEntity : class
   {

    Task<TEntity> QueryByID(object objId);
    Task<TEntity> QueryByID(object objId, bool blnUseCache = false);
    Task<List<TEntity>> QueryByIDs(object[] lstIds);

    Task<int> Add(TEntity model);

    Task<bool> DeleteById(object id);

    Task<bool> Delete(TEntity model);

    Task<bool> DeleteByIds(object[] ids);

    Task<bool> Update(TEntity model);
    Task<bool> Update(TEntity entity, string strWhere);
    Task<bool> Update(TEntity entity, List<string> lstColumns = null, List<string> lstIgnoreColumns = null, string strWhere = "");

    Task<List<TEntity>> Query();
    Task<List<TEntity>> Query(string strWhere);
    Task<List<TEntity>> Query(Expression<Func<TEntity, bool>> whereExpression);
    Task<List<TEntity>> Query(Expression<Func<TEntity, bool>> whereExpression, string strOrderByFileds);
    Task<List<TEntity>> Query(Expression<Func<TEntity, bool>> whereExpression, Expression<Func<TEntity, object>> orderByExpression, bool isAsc = true);
    Task<List<TEntity>> Query(string strWhere, string strOrderByFileds);
    Task<List<TEntity>> Query(Expression<Func<TEntity, bool>> whereExpression, int intTop, string strOrderByFileds);
    Task<List<TEntity>> Query(string strWhere, int intTop, string strOrderByFileds);
    Task<List<TEntity>> Query(
        Expression<Func<TEntity, bool>> whereExpression, int intPageIndex, int intPageSize, string strOrderByFileds);
    Task<List<TEntity>> Query(string strWhere, int intPageIndex, int intPageSize, string strOrderByFileds);
    Task<List<TEntity>> QueryPage(Expression<Func<TEntity, bool>> whereExpression, int intPageIndex = 0, int intPageSize = 20, string strOrderByFileds =             
    null);
}

2、IAdvertisementRepository 繼承Base基類

public interface IAdvertisementRepository:IBaseRepository<Advertisement>
{
    int Sum(int i, int j);

    //int Add(Advertisement model);
    //bool Delete(Advertisement model);
    //bool Update(Advertisement model);
    //List<Advertisement> Query(Expression<Func<Advertisement, bool>> whereExpression);
}

3、在Blog.Core.Repository 層中新增BASE資料夾,並新增介面 Repository.cs

   public class BaseRepository<TEntity> : IBaseRepository<TEntity> where TEntity : class, new()
{
    private DbContext context;
    private SqlSugarClient db;
    private SimpleClient<TEntity> entityDB;

    public DbContext Context
    {
        get { return context; }
        set { context = value; }
    }
    internal SqlSugarClient Db
    {
        get { return db; }
        private set { db = value; }
    }
    internal SimpleClient<TEntity> EntityDB
    {
        get { return entityDB; }
        private set { entityDB = value; }
    }
    public BaseRepository()
    {
        DbContext.Init(BaseDBConfig.ConnectionString);
        DbContext.DbType = DbType.MySql;
        context = DbContext.GetDbContext();
        db = context.Db;
        entityDB = context.GetEntityDB<TEntity>(db);
    }



    public async Task<TEntity> QueryByID(object objId)
    {
        return await Task.Run(() => db.Queryable<TEntity>().InSingle(objId));
    }
    /// <summary>
    /// 功能描述:根據ID查詢一條資料
    /// 作  者:Blog.Core
    /// </summary>
    /// <param name="objId">id(必須指定主鍵特性 [SugarColumn(IsPrimaryKey=true)]),如果是聯合主鍵,請使用Where條件</param>
    /// <param name="blnUseCache">是否使用快取</param>
    /// <returns>資料實體</returns>
    public async Task<TEntity> QueryByID(object objId, bool blnUseCache = false)
    {
        return await Task.Run(() => db.Queryable<TEntity>().WithCacheIF(blnUseCache).InSingle(objId));
    }

    /// <summary>
    /// 功能描述:根據ID查詢資料
    /// 作  者:Blog.Core
    /// </summary>
    /// <param name="lstIds">id列表(必須指定主鍵特性 [SugarColumn(IsPrimaryKey=true)]),如果是聯合主鍵,請使用Where條件</param>
    /// <returns>資料實體列表</returns>
    public async Task<List<TEntity>> QueryByIDs(object[] lstIds)
    {
        return await Task.Run(() => db.Queryable<TEntity>().In(lstIds).ToList());
    }

    /// <summary>
    /// 寫入實體資料
    /// </summary>
    /// <param name="entity">博文實體類</param>
    /// <returns></returns>
    public async Task<int> Add(TEntity entity)
    {
        var i = await Task.Run(() => db.Insertable(entity).ExecuteReturnBigIdentity());
        //返回的i是long型別,這裡你可以根據你的業務需要進行處理
        return (int)i;
    }

    /// <summary>
    /// 更新實體資料
    /// </summary>
    /// <param name="entity">博文實體類</param>
    /// <returns></returns>
    public async Task<bool> Update(TEntity entity)
    {
        //這種方式會以主鍵為條件
        var i = await Task.Run(() => db.Updateable(entity).ExecuteCommand());
        return i > 0;
    }

    public async Task<bool> Update(TEntity entity, string strWhere)
    {
        return await Task.Run(() => db.Updateable(entity).Where(strWhere).ExecuteCommand() > 0);
    }

    public async Task<bool> Update(string strSql, SugarParameter[] parameters = null)
    {
        return await Task.Run(() => db.Ado.ExecuteCommand(strSql, parameters) > 0);
    }

    public async Task<bool> Update(
      TEntity entity,
      List<string> lstColumns = null,
      List<string> lstIgnoreColumns = null,
      string strWhere = ""
        )
    {
        IUpdateable<TEntity> up = await Task.Run(() => db.Updateable(entity));
        if (lstIgnoreColumns != null && lstIgnoreColumns.Count > 0)
        {
            up = await Task.Run(() => up.IgnoreColumns(it => lstIgnoreColumns.Contains(it)));
        }
        if (lstColumns != null && lstColumns.Count > 0)
        {
            up = await Task.Run(() => up.UpdateColumns(it => lstColumns.Contains(it)));
        }
        if (!string.IsNullOrEmpty(strWhere))
        {
            up = await Task.Run(() => up.Where(strWhere));
        }
        return await Task.Run(() => up.ExecuteCommand()) > 0;
    }

    /// <summary>
    /// 根據實體刪除一條資料
    /// </summary>
    /// <param name="entity">博文實體類</param>
    /// <returns></returns>
    public async Task<bool> Delete(TEntity entity)
    {
        var i = await Task.Run(() => db.Deleteable(entity).ExecuteCommand());
        return i > 0;
    }

    /// <summary>
    /// 刪除指定ID的資料
    /// </summary>
    /// <param name="id">主鍵ID</param>
    /// <returns></returns>
    public async Task<bool> DeleteById(object id)
    {
        var i = await Task.Run(() => db.Deleteable<TEntity>(id).ExecuteCommand());
        return i > 0;
    }

    /// <summary>
    /// 刪除指定ID集合的資料(批量刪除)
    /// </summary>
    /// <param name="ids">主鍵ID集合</param>
    /// <returns></returns>
    public async Task<bool> DeleteByIds(object[] ids)
    {
        var i = await Task.Run(() => db.Deleteable<TEntity>().In(ids).ExecuteCommand());
        return i > 0;
    }



    /// <summary>
    /// 功能描述:查詢所有資料
    /// 作  者:Blog.Core
    /// </summary>
    /// <returns>資料列表</returns>
    public async Task<List<TEntity>> Query()
    {
        return await Task.Run(() => entityDB.GetList());
    }

    /// <summary>
    /// 功能描述:查詢資料列表
    /// 作  者:Blog.Core
    /// </summary>
    /// <param name="strWhere">條件</param>
    /// <returns>資料列表</returns>
    public async Task<List<TEntity>> Query(string strWhere)
    {
        return await Task.Run(() => db.Queryable<TEntity>().WhereIF(!string.IsNullOrEmpty(strWhere), strWhere).ToList());
    }

    /// <summary>
    /// 功能描述:查詢資料列表
    /// 作  者:Blog.Core
    /// </summary>
    /// <param name="whereExpression">whereExpression</param>
    /// <returns>資料列表</returns>
    public async Task<List<TEntity>> Query(Expression<Func<TEntity, bool>> whereExpression)
    {
        return await Task.Run(() => entityDB.GetList(whereExpression));
    }

    /// <summary>
    /// 功能描述:查詢一個列表
    /// 作  者:Blog.Core
    /// </summary>
    /// <param name="whereExpression">條件表示式</param>
    /// <param name="strOrderByFileds">排序欄位,如name asc,age desc</param>
    /// <returns>資料列表</returns>
    public async Task<List<TEntity>> Query(Expression<Func<TEntity, bool>> whereExpression, string strOrderByFileds)
    {
        return await Task.Run(() => db.Queryable<TEntity>().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(whereExpression != null, whereExpression).ToList());
    }
    /// <summary>
    /// 功能描述:查詢一個列表
    /// </summary>
    /// <param name="whereExpression"></param>
    /// <param name="orderByExpression"></param>
    /// <param name="isAsc"></param>
    /// <returns></returns>
    public async Task<List<TEntity>> Query(Expression<Func<TEntity, bool>> whereExpression, Expression<Func<TEntity, object>> orderByExpression, bool isAsc = true)
    {
        return await Task.Run(() => db.Queryable<TEntity>().OrderByIF(orderByExpression != null, orderByExpression, isAsc ? OrderByType.Asc : OrderByType.Desc).WhereIF(whereExpression != null, whereExpression).ToList());
    }

    /// <summary>
    /// 功能描述:查詢一個列表
    /// 作  者:Blog.Core
    /// </summary>
    /// <param name="strWhere">條件</param>
    /// <param name="strOrderByFileds">排序欄位,如name asc,age desc</param>
    /// <returns>資料列表</returns>
    public async Task<List<TEntity>> Query(string strWhere, string strOrderByFileds)
    {
        return await Task.Run(() => db.Queryable<TEntity>().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(!string.IsNullOrEmpty(strWhere), strWhere).ToList());
    }


    /// <summary>
    /// 功能描述:查詢前N條資料
    /// 作  者:Blog.Core
    /// </summary>
    /// <param name="whereExpression">條件表示式</param>
    /// <param name="intTop">前N條</param>
    /// <param name="strOrderByFileds">排序欄位,如name asc,age desc</param>
    /// <returns>資料列表</returns>
    public async Task<List<TEntity>> Query(
        Expression<Func<TEntity, bool>> whereExpression,
        int intTop,
        string strOrderByFileds)
    {
        return await Task.Run(() => db.Queryable<TEntity>().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(whereExpression != null, whereExpression).Take(intTop).ToList());
    }

    /// <summary>
    /// 功能描述:查詢前N條資料
    /// 作  者:Blog.Core
    /// </summary>
    /// <param name="strWhere">條件</param>
    /// <param name="intTop">前N條</param>
    /// <param name="strOrderByFileds">排序欄位,如name asc,age desc</param>
    /// <returns>資料列表</returns>
    public async Task<List<TEntity>> Query(
        string strWhere,
        int intTop,
        string strOrderByFileds)
    {
        return await Task.Run(() => db.Queryable<TEntity>().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(!string.IsNullOrEmpty(strWhere), strWhere).Take(intTop).ToList());
    }

    /// <summary>
    /// 功能描述:分頁查詢
    /// 作  者:Blog.Core
    /// </summary>
    /// <param name="whereExpression">條件表示式</param>
    /// <param name="intPageIndex">頁碼(下標0)</param>
    /// <param name="intPageSize">頁大小</param>
    /// <param name="intTotalCount">資料總量</param>
    /// <param name="strOrderByFileds">排序欄位,如name asc,age desc</param>
    /// <returns>資料列表</returns>
    public async Task<List<TEntity>> Query(
        Expression<Func<TEntity, bool>> whereExpression,
        int intPageIndex,
        int intPageSize,
        string strOrderByFileds)
    {
        return await Task.Run(() => db.Queryable<TEntity>().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(whereExpression != null, whereExpression).ToPageList(intPageIndex, intPageSize));
    }

    /// <summary>
    /// 功能描述:分頁查詢
    /// 作  者:Blog.Core
    /// </summary>
    /// <param name="strWhere">條件</param>
    /// <param name="intPageIndex">頁碼(下標0)</param>
    /// <param name="intPageSize">頁大小</param>
    /// <param name="intTotalCount">資料總量</param>
    /// <param name="strOrderByFileds">排序欄位,如name asc,age desc</param>
    /// <returns>資料列表</returns>
    public async Task<List<TEntity>> Query(
      string strWhere,
      int intPageIndex,
      int intPageSize,
      string strOrderByFileds)
    {
        return await Task.Run(() => db.Queryable<TEntity>().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(!string.IsNullOrEmpty(strWhere), strWhere).ToPageList(intPageIndex, intPageSize));
    }

    public async Task<List<TEntity>> QueryPage(Expression<Func<TEntity, bool>> whereExpression,
    int intPageIndex = 0, int intPageSize = 20, string strOrderByFileds = null)
    {
        return await Task.Run(() => db.Queryable<TEntity>()
        .OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds)
        .WhereIF(whereExpression != null, whereExpression)
        .ToPageList(intPageIndex, intPageSize));
    }
}

4、AdvertisementRepository 繼承Base基類

public class AdvertisementRepository : BaseRepository<Advertisement>,IAdvertisementRepository
{
    //private DbContext context;
    //private SqlSugarClient db;
    //private SimpleClient<Advertisement> entityDB;

    //internal SqlSugarClient Db
    //{
    //    get { return db; }
    //    private set { db = value; }
    //}
    //public DbContext Context
    //{
    //    get { return context; }
    //    set { context = value; }
    //}
    //public AdvertisementRepository()
    //{
    //    DbContext.Init(BaseDBConfig.ConnectionString);
    //    DbContext.DbType = DbType.MySql;
    //    context = DbContext.GetDbContext();
    //    db = context.Db;
    //    entityDB = context.GetEntityDB<Advertisement>(db);
    //}
    //public int Add(Advertisement model)
    //{
    //    //返回的i是long型別,這裡你可以根據你的業務需要進行處理
    //    var i = db.Insertable(model).ExecuteReturnBigIdentity();
    //    return i.ObjToInt();
    //}

    //public bool Delete(Advertisement model)
    //{
    //    var i = db.Deleteable(model).ExecuteCommand();
    //    return i > 0;
    //}

    //public List<Advertisement> Query(Expression<Func<Advertisement, bool>> whereExpression)
    //{
    //    return entityDB.GetList(whereExpression);

    //}

    public int Sum(int i, int j)
    {
        return i + j;
    }

    //public bool Update(Advertisement model)
    //{
    //    //這種方式會以主鍵為條件
    //    var i = db.Updateable(model).ExecuteCommand();
    //    return i > 0;
    //}
}

5、在Blog.Core.IService 層中新增BASE資料夾,並新增介面 IBaseService.cs

public interface IBaseServices<TEntity> where TEntity : class
{

    Task<TEntity> QueryByID(object objId);
    Task<TEntity> QueryByID(object objId, bool blnUseCache = false);
    Task<List<TEntity>> QueryByIDs(object[] lstIds);

    Task<int> Add(TEntity model);

    Task<bool> DeleteById(object id);

    Task<bool> Delete(TEntity model);

    Task<bool> DeleteByIds(object[] ids);

    Task<bool> Update(TEntity model);
    Task<bool> Update(TEntity entity, string strWhere);

    Task<bool> Update(TEntity entity, List<string> lstColumns = null, List<string> lstIgnoreColumns = null, string strWhere = "");

    Task<List<TEntity>> Query();
    Task<List<TEntity>> Query(string strWhere);
    Task<List<TEntity>> Query(Expression<Func<TEntity, bool>> whereExpression);
    Task<List<TEntity>> Query(Expression<Func<TEntity, bool>> whereExpression, string strOrderByFileds);
    Task<List<TEntity>> Query(Expression<Func<TEntity, bool>> whereExpression, Expression<Func<TEntity, object>> orderByExpression, bool isAsc = true);
    Task<List<TEntity>> Query(string strWhere, string strOrderByFileds);

    Task<List<TEntity>> Query(Expression<Func<TEntity, bool>> whereExpression, int intTop, string strOrderByFileds);
    Task<List<TEntity>> Query(string strWhere, int intTop, string strOrderByFileds);

    Task<List<TEntity>> Query(
        Expression<Func<TEntity, bool>> whereExpression, int intPageIndex, int intPageSize, string strOrderByFileds);
    Task<List<TEntity>> Query(string strWhere, int intPageIndex, int intPageSize, string strOrderByFileds);

    Task<List<TEntity>> QueryPage(Expression<Func<TEntity, bool>> whereExpression, int intPageIndex = 0, int intPageSize = 20, string strOrderByFileds = null);
}

6、IAdvertisementServices 繼承Base基類

public interface IAdvertisementServices: IBaseServices<Advertisement>
{
    int Sum(int i, int j);
    //int Add(Advertisement model);
    //bool Delete(Advertisement model);
    //bool Update(Advertisement model);
    //List<Advertisement> Query(Expression<Func<Advertisement, bool>> whereExpression);
}

7、在Blog.Core.Service 層中新增BASE資料夾,並新增介面 BaseServices.cs

   public class BaseServices<TEntity> : IBaseServices<TEntity> where TEntity : class, new()
{
    public IBaseRepository<TEntity> baseDal = new BaseRepository<TEntity>();

    public async Task<TEntity> QueryByID(object objId)
    {
        return await baseDal.QueryByID(objId);
    }
    /// <summary>
    /// 功能描述:根據ID查詢一條資料
    /// 作  者:AZLinli.Blog.Core
    /// </summary>
    /// <param name="objId">id(必須指定主鍵特性 [SugarColumn(IsPrimaryKey=true)]),如果是聯合主鍵,請使用Where條件</param>
    /// <param name="blnUseCache">是否使用快取</param>
    /// <returns>資料實體</returns>
    public async Task<TEntity> QueryByID(object objId, bool blnUseCache = false)
    {
        return await baseDal.QueryByID(objId, blnUseCache);
    }

    /// <summary>
    /// 功能描述:根據ID查詢資料
    /// 作  者:AZLinli.Blog.Core
    /// </summary>
    /// <param name="lstIds">id列表(必須指定主鍵特性 [SugarColumn(IsPrimaryKey=true)]),如果是聯合主鍵,請使用Where條件</param>
    /// <returns>資料實體列表</returns>
    public async Task<List<TEntity>> QueryByIDs(object[] lstIds)
    {
        return await baseDal.QueryByIDs(lstIds);
    }

    /// <summary>
    /// 寫入實體資料
    /// </summary>
    /// <param name="entity">博文實體類</param>
    /// <returns></returns>
    public async Task<int> Add(TEntity entity)
    {
        return await baseDal.Add(entity);
    }

    /// <summary>
    /// 更新實體資料
    /// </summary>
    /// <param name="entity">博文實體類</param>
    /// <returns></returns>
    public async Task<bool> Update(TEntity entity)
    {
        return await baseDal.Update(entity);
    }
    public async Task<bool> Update(TEntity entity, string strWhere)
    {
        return await baseDal.Update(entity, strWhere);
    }

    public async Task<bool> Update(
     TEntity entity,
     List<string> lstColumns = null,
     List<string> lstIgnoreColumns = null,
     string strWhere = ""
        )
    {
        return await baseDal.Update(entity, lstColumns, lstIgnoreColumns, strWhere);
    }


    /// <summary>
    /// 根據實體刪除一條資料
    /// </summary>
    /// <param name="entity">博文實體類</param>
    /// <returns></returns>
    public async Task<bool> Delete(TEntity entity)
    {
        return await baseDal.Delete(entity);
    }

    /// <summary>
    /// 刪除指定ID的資料
    /// </summary>
    /// <param name="id">主鍵ID</param>
    /// <returns></returns>
    public async Task<bool> DeleteById(object id)
    {
        return await baseDal.DeleteById(id);
    }

    /// <summary>
    /// 刪除指定ID集合的資料(批量刪除)
    /// </summary>
    /// <param name="ids">主鍵ID集合</param>
    /// <returns></returns>
    public async Task<bool> DeleteByIds(object[] ids)
    {
        return await baseDal.DeleteByIds(ids);
    }



    /// <summary>
    /// 功能描述:查詢所有資料
    /// 作  者:AZLinli.Blog.Core
    /// </summary>
    /// <returns>資料列表</returns>
    public async Task<List<TEntity>> Query()
    {
        return await baseDal.Query();
    }

    /// <summary>
    /// 功能描述:查詢資料列表
    /// 作  者:AZLinli.Blog.Core
    /// </summary>
    /// <param name="strWhere">條件</param>
    /// <returns>資料列表</returns>
    public async Task<List<TEntity>> Query(string strWhere)
    {
        return await baseDal.Query(strWhere);
    }

    /// <summary>
    /// 功能描述:查詢資料列表
    /// 作  者:AZLinli.Blog.Core
    /// </summary>
    /// <param name="whereExpression">whereExpression</param>
    /// <returns>資料列表</returns>
    public async Task<List<TEntity>> Query(Expression<Func<TEntity, bool>> whereExpression)
    {
        return await baseDal.Query(whereExpression);
    }
    /// <summary>
    /// 功能描述:查詢一個列表
    /// 作  者:AZLinli.Blog.Core
    /// </summary>
    /// <param name="whereExpression">條件表示式</param>
    /// <param name="strOrderByFileds">排序欄位,如name asc,age desc</param>
    /// <returns>資料列表</returns>
    public async Task<List<TEntity>> Query(Expression<Func<TEntity, bool>> whereExpression, Expression<Func<TEntity, object>> orderByExpression, bool isAsc = true)
    {
        return await baseDal.Query(whereExpression, orderByExpression, isAsc);
    }

    public async Task<List<TEntity>> Query(Expression<Func<TEntity, bool>> whereExpression, string strOrderByFileds)
    {
        return await baseDal.Query(whereExpression, strOrderByFileds);
    }

    /// <summary>
    /// 功能描述:查詢一個列表
    /// 作  者:AZLinli.Blog.Core
    /// </summary>
    /// <param name="strWhere">條件</param>
    /// <param name="strOrderByFileds">排序欄位,如name asc,age desc</param>
    /// <returns>資料列表</returns>
    public async Task<List<TEntity>> Query(string strWhere, string strOrderByFileds)
    {
        return await baseDal.Query(strWhere, strOrderByFileds);
    }

    /// <summary>
    /// 功能描述:查詢前N條資料
    /// 作  者:AZLinli.Blog.Core
    /// </summary>
    /// <param name="whereExpression">條件表示式</param>
    /// <param name="intTop">前N條</param>
    /// <param name="strOrderByFileds">排序欄位,如name asc,age desc</param>
    /// <returns>資料列表</returns>
    public async Task<List<TEntity>> Query(Expression<Func<TEntity, bool>> whereExpression, int intTop, string strOrderByFileds)
    {
        return await baseDal.Query(whereExpression, intTop, strOrderByFileds);
    }

    /// <summary>
    /// 功能描述:查詢前N條資料
    /// 作  者:AZLinli.Blog.Core
    /// </summary>
    /// <param name="strWhere">條件</param>
    /// <param name="intTop">前N條</param>
    /// <param name="strOrderByFileds">排序欄位,如name asc,age desc</param>
    /// <returns>資料列表</returns>
    public async Task<List<TEntity>> Query(
        string strWhere,
        int intTop,
        string strOrderByFileds)
    {
        return await baseDal.Query(strWhere, intTop, strOrderByFileds);
    }

    /// <summary>
    /// 功能描述:分頁查詢
    /// 作  者:AZLinli.Blog.Core
    /// </summary>
    /// <param name="whereExpression">條件表示式</param>
    /// <param name="intPageIndex">頁碼(下標0)</param>
    /// <param name="intPageSize">頁大小</param>
    /// <param name="intTotalCount">資料總量</param>
    /// <param name="strOrderByFileds">排序欄位,如name asc,age desc</param>
    /// <returns>資料列表</returns>
    public async Task<List<TEntity>> Query(
        Expression<Func<TEntity, bool>> whereExpression,
        int intPageIndex,
        int intPageSize,
        string strOrderByFileds)
    {
        return await baseDal.Query(
          whereExpression,
          intPageIndex,
          intPageSize,
          strOrderByFileds);
    }

    /// <summary>
    /// 功能描述:分頁查詢
    /// 作  者:AZLinli.Blog.Core
    /// </summary>
    /// <param name="strWhere">條件</param>
    /// <param name="intPageIndex">頁碼(下標0)</param>
    /// <param name="intPageSize">頁大小</param>
    /// <param name="intTotalCount">資料總量</param>
    /// <param name="strOrderByFileds">排序欄位,如name asc,age desc</param>
    /// <returns>資料列表</returns>
    public async Task<List<TEntity>> Query(
      string strWhere,
      int intPageIndex,
      int intPageSize,
      string strOrderByFileds)
    {
        return await baseDal.Query(
        strWhere,
        intPageIndex,
        intPageSize,
        strOrderByFileds);
    }

    public async Task<List<TEntity>> QueryPage(Expression<Func<TEntity, bool>> whereExpression,
    int intPageIndex = 0, int intPageSize = 20, string strOrderByFileds = null)
    {
        return await baseDal.QueryPage(whereExpression,
     intPageIndex = 0, intPageSize, strOrderByFileds);
    }

}

8、AdvertisementService 繼承Base基類

public class AdvertisementServices : BaseServices<Advertisement>,IAdvertisementServices
{
    public IAdvertisementRepository dal = new AdvertisementRepository();
    public int Sum(int i, int j)
    {
        return dal.Sum(i, j);

    }
    //public int Add(Advertisement model)
    //{
    //    return dal.Add(model);
    //}

    //public bool Delete(Advertisement model)
    //{
    //    return dal.Delete(model);
    //}

    //public List<Advertisement> Query(Expression<Func<Advertisement, bool>> whereExpression)
    //{
    //    return dal.Query(whereExpression);

    //}

    //public bool Update(Advertisement model)
    //{
    //    return dal.Update(model);
    //}
}

二、執行專案,並除錯介面

這個時候,需要把介面改成非同步請求方式:

   // GET: api/Blog/5
    /// <summary>
    /// 根據id獲取資料
    /// </summary>
    /// <param name="id">引數id</param>
    /// <returns></returns>
    [HttpGet("{id}", Name = "Get")]
    public async Task<List<Advertisement>> Get(int id)
    {
        IAdvertisementServices advertisementServices = new AdvertisementServices();

        return await advertisementServices.Query(d => d.Id == id);
    }

Http返回200,一切正常

結語

這一章節抽取了泛型基類,並且將請求改為非同步請求。

Github

https://github.com/Nick-Hoper/Blog.Core.Demo.git