.NetCore,WebApi簡易開發框架搭建


1.首先,新建一個.NetCoreWeb開發項目,選擇WebApi

如圖所示,新建幾個文件夾

本框架使用的ORM為Sqlsugar,直接在依賴項--->管理nuget程序包,搜索Sqlsugar,選擇SqlsugarCore,安裝

安裝好ORM后,我們開始連接數據庫

首先寫DbContext類

 public class DbContext
    {
        public SqlSugarClient Db;
        public DbContext()
        {
            Db = new SqlSugarClient(new ConnectionConfig()
            {
                ConnectionString = ConfigurationManager.Configuration["ConnectionStrings:SqlServerConnection"],
                DbType = DbType.SqlServer,//設置數據庫類型
                IsAutoCloseConnection = true,//自動釋放數據務,如果存在事務,在事務結束后釋放
                InitKeyType = InitKeyType.Attribute //從實體特性中讀取主鍵自增列信息
            });           
        }

        public DbSet<DbModel> GetDb<DbModel>() where DbModel : class, new()
        {
            return new DbSet<DbModel>(Db);
        }
        /// <summary>
        /// 擴展ORM
        /// </summary>
        /// <typeparam name="T"></typeparam>
        public class DbSet<T> : SimpleClient<T> where T : class, new()
        {

            public DbSet(SqlSugarClient context) : base(context)
            {

            }
        }
    }

這里ConfigurationManager,是用來處理讀取配置文件的,即appsettings.json

public class ConfigurationManager
    {
        public readonly static IConfiguration Configuration;
        static ConfigurationManager()
        {
            Configuration = new ConfigurationBuilder()
             .Add(new JsonConfigurationSource { Path = "appsettings.json", ReloadOnChange = true })
             .Build();
        }
    }

在配置文件里設置數據庫連接字符串

接下來我們開始寫基礎倉儲處理

在interface文件夾新建接口IBaseServer接口

public interface IBaseServer<T> where T : class
    {
        /// <summary>
        /// 查詢數據不需要任何條件
        /// </summary>
        /// <returns></returns>
        Task<ApiResult<List<T>>> GetListAsync();

        /// <summary>
        /// 添加一條數據
        /// </summary>
        /// <param name="parm"></param>
        /// <returns></returns>
        Task<ApiResult<string>> AddAsync(T parm);


        /// <summary>
        /// 刪除一條或者多條數據
        /// </summary>
        /// <param name="parm"></param>
        /// <returns></returns>
        Task<ApiResult<string>> DeleteAsync(string parm);

        /// <summary>
        /// 修改一條數據
        /// </summary>
        /// <param name="pram"></param>
        /// <returns></returns>
        Task<ApiResult<string>> UpdateAsync(T pram);

        /// <summary>
        /// 獲得一條數據
        /// </summary>
        /// <param name="where">Expression<Func<T, bool>></param>
        /// <returns></returns>
        Task<ApiResult<T>> GetModelAsync(Expression<Func<T, bool>> where);

        /// <summary>
        /// 添加多條數據
        /// </summary>
        /// <param name="parm"></param>
        /// <returns></returns>
        Task<ApiResult<List<T>>> AddList(List<T> parm);
    }
IBaseServer<T> where T : class ,接口限制傳入的必須為類

在BaseServer文件夾新建BaseServer類,這個是對接口的實現
/// <summary>
    /// 學習筆記:
    /// 接口實現要繼承數據庫上下文類和接口
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public class BaseServer<T> : DbContext, IBaseServer<T> where T : class, new()
    {
        /// <summary>
        /// 簡單查詢
        /// </summary>
        /// <returns></returns>
        public Task<ApiResult<List<T>>> GetListAsync()
        {
            var res = new ApiResult<List<T>>();//定義res對象
            try
            {
                var query = Db.Queryable<T>().ToList();
                res.success = true;
                res.message = "獲得成功";
                res.statusCode = (int)ApiEnum.Error;
                res.data = query;
            }
            catch (Exception ex)
            {
                res.message = ApiEnum.Error.GetEnumText() + ex.Message;
                res.statusCode = (int)ApiEnum.Error;
            }
            return Task.Run(() => res);
        }

        /// <summary>
        /// 插入一條數據
        /// </summary>
        /// <param name="parm"></param>
        /// <returns></returns>
        public async Task<ApiResult<string>> AddAsync(T parm)
        {
            //將報錯狀態重新賦值
            var res = new ApiResult<string>() { statusCode = (int)ApiEnum.Error };
            try
            {
                var dbres = GetDb<T>().Insert(parm);
                if (!dbres)
                {
                    res.message = "添加失敗~";
                }
                else
                {
                    res.message = "添加成功~";
                    res.success = true;
                    res.statusCode = (int)ApiEnum.Status;
                }
            }
            catch (Exception ex)
            {
                res.message = ApiEnum.Error.GetEnumText() + ex.Message;
            }
            return await Task.Run(() => res);
        }

        /// <summary>
        /// 刪除一條或者多條數據
        /// </summary>
        /// <param name="parm"></param>
        /// <returns></returns>
        public async Task<ApiResult<string>> DeleteAsync(string parm)
        {
            var res = new ApiResult<string>() { statusCode = (int)ApiEnum.Error };
            try
            {
                var list = Utils.StrToListString(parm);
                var dbres = GetDb<T>().DeleteByIds(list.ToArray());
                if (!dbres)
                {
                    res.message = "刪除數據失敗~";
                }
                else
                {
                    res.success = true;
                    res.message = "刪除數據成功~";
                    res.statusCode = (int)ApiEnum.Status;
                }
            }
            catch (Exception ex)
            {
                res.message = ApiEnum.Error.GetEnumText() + ex.Message;
            }
            return await Task.Run(() => res);
        }

        /// <summary>
        /// 更新一條數據
        /// </summary>
        /// <param name="parm"></param>
        /// <returns></returns>
        public async Task<ApiResult<string>> UpdateAsync(T parm)
        {
            var res = new ApiResult<string>() { statusCode = (int)ApiEnum.Error };
            try
            {
                var dbres = GetDb<T>().Update(parm);
                if (!dbres)
                {
                    res.message = "修改數據失敗~";
                }
                else
                {
                    res.success = true;
                    res.message = "修改數據成功~";
                    res.statusCode = (int)ApiEnum.Status;
                }
            }
            catch (Exception ex)
            {
                res.statusCode = (int)ApiEnum.Status;
                res.message = ApiEnum.Error.GetEnumText() + ex.Message;
            }
            return await Task.Run(() => res);
        }


        /// <summary>
        /// 獲得一條數據
        /// </summary>
        /// <param name="where">Expression<Func<T, bool>></param>
        /// <returns></returns>
        public async Task<ApiResult<T>> GetModelAsync(Expression<Func<T, bool>> where)
        {
            var model = GetDb<T>().GetSingle(where);
            var res = new ApiResult<T>
            {
                statusCode = 200,
                data = model ?? new T() { }
            };
            return await Task.Run(() => res);
        }

        /// <summary>
        /// 插入多條數據
        /// </summary>
        /// <param name="parm"></param>
        /// <returns></returns>
        public async Task<ApiResult<List<T>>> AddList(List<T> parm)
        {
            //將報錯狀態重新賦值
            var res = new ApiResult<List<T>>() { statusCode = (int)ApiEnum.Error };
            try
            {

                var dbres = Db.Insertable(parm).ExecuteCommand();
                if (dbres == 0)
                {
                    res.message = "添加失敗~";
                }
                else
                {
                    res.message = "添加成功~,添加了" + dbres + "";
                    res.success = true;
                    res.statusCode = (int)ApiEnum.Status;
                }
            }
            catch (Exception ex)
            {
                res.message = ApiEnum.Error.GetEnumText() + ex.Message;
            }
            return await Task.Run(() => res);
        }
    }

接口和實現類寫好以后我們需要再startup文件進行接口的注冊

public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
            //接口注冊
            services.AddTransient<ITUserAuthsService, TUserAuthsService>();
           
        }

接口注冊完成之后,我們需要新建控制器了,通過溝槽函數的形式實現接口的注入,注入后,寫個方法跑一下

 public class LoginController : ControllerBase
    {
        private readonly ITUserAuthsService _tUserAuthsService;

        public LoginController(ITUserAuthsService tUserAuthsService)
        {
            _tUserAuthsService = tUserAuthsService;
        }

        /// <summary>
        /// 用戶登陸
        /// </summary>
        /// <param name="parm"></param>
        /// <returns></returns>
        [HttpPost("Login")]
        public async Task<ApiResult<Result>> LoginAsync([FromBody]TUserAuthsLogin parm)
        {

            return await _tUserAuthsService.LoginAsync(parm);
        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM