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); } }