SqlSugar 是一ORM框架,官方文檔地址:http://www.codeisbug.com 有興趣的朋友自行查看。
這里主要說建立 一個簡單的實例。
1.建立實體類,這是我就不再把實體寫出來了。
2.建立通用數據庫連接及數據操作類,這里是直接從官方的例子的基礎上衍生的一個通用類,用的是泛型的方式
public class DbContext<T> where T: class,new() { public DbContext() { Db = new SqlSugarClient(new ConnectionConfig() { ConnectionString = ConfigurationSettings.AppSettings["HR Connection String"].ToString(), DbType = DbType.SqlServer, InitKeyType = InitKeyType.Attribute,//從特性讀取主鍵和自增列信息 IsAutoCloseConnection = true,//開啟自動釋放模式和EF原理一樣我就不多解釋了 }); //調式代碼 用來打印SQL Db.Aop.OnLogExecuting = (sql, pars) => { Console.WriteLine(sql + "\r\n" + Db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value))); Console.WriteLine(); AppLog.Info(sql); }; } //注意:不能寫成靜態的 public SqlSugarClient Db;//用來處理事務多表查詢和復雜的操作 public SimpleClient<T> CurrentDb { get { return new SimpleClient<T>(Db); } }//用來處理T表的常用操作 /// <summary> /// 獲取所有 /// </summary> /// <returns></returns> public virtual List<T> GetList() { return CurrentDb.GetList(); } /// <summary> /// 根據表達式查詢 /// </summary> /// <returns></returns> public virtual List<T> GetList(Expression<Func<T, bool>> whereExpression) { return CurrentDb.GetList(whereExpression); } /// <summary> /// 根據表達式查詢分頁 /// </summary> /// <returns></returns> public virtual List<T> GetPageList(Expression<Func<T, bool>> whereExpression, PageModel pageModel) { return CurrentDb.GetPageList(whereExpression, pageModel); } /// <summary> /// 根據表達式查詢分頁並排序 /// </summary> /// <param name="whereExpression">it</param> /// <param name="pageModel"></param> /// <param name="orderByExpression">it=>it.id或者it=>new{it.id,it.name}</param> /// <param name="orderByType">OrderByType.Desc</param> /// <returns></returns> public virtual List<T> GetPageList(Expression<Func<T, bool>> whereExpression, PageModel pageModel, Expression<Func<T, object>> orderByExpression = null, OrderByType orderByType = OrderByType.Asc) { return CurrentDb.GetPageList(whereExpression, pageModel, orderByExpression, orderByType); } /// <summary> /// 根據主鍵查詢 /// </summary> /// <returns></returns> public virtual T GetById(dynamic id) { return CurrentDb.GetById(id); } /// <summary> /// 根據主鍵刪除 /// </summary> /// <param name="id"></param> /// <returns></returns> public virtual bool Delete(dynamic id) { return CurrentDb.Delete(id); } /// <summary> /// 根據實體刪除 /// </summary> /// <param name="id"></param> /// <returns></returns> public virtual bool Delete(T data) { return CurrentDb.Delete(data); } /// <summary> /// 根據主鍵刪除 /// </summary> /// <param name="id"></param> /// <returns></returns> public virtual bool Delete(dynamic[] ids) { return CurrentDb.AsDeleteable().In(ids).ExecuteCommand() > 0; } /// <summary> /// 根據表達式刪除 /// </summary> /// <param name="id"></param> /// <returns></returns> public virtual bool Delete(Expression<Func<T, bool>> whereExpression) { return CurrentDb.Delete(whereExpression); } /// <summary> /// 根據實體更新,實體需要有主鍵 /// </summary> /// <param name="id"></param> /// <returns></returns> public virtual bool Update(T obj) { return CurrentDb.Update(obj); } /// <summary> ///批量更新 /// </summary> /// <param name="id"></param> /// <returns></returns> public virtual bool Update(List<T> objs) { return CurrentDb.UpdateRange(objs); } /// <summary> /// 插入 /// </summary> /// <param name="id"></param> /// <returns></returns> public virtual bool Insert(T obj) { return CurrentDb.Insert(obj); } /// <summary> /// 批量 /// </summary> /// <param name="id"></param> /// <returns></returns> public virtual bool Insert(List<T> objs) { return CurrentDb.InsertRange(objs); } /// <summary> /// 查詢sql 返回list /// </summary> /// <param name="sqlstr"></param> /// <returns></returns> public List<T> SqlQueryList(string sqlstr) { return this.Db.SqlQueryable<T>(sqlstr).ToList(); } /// <summary> /// 查詢sql 返回table /// </summary> /// <param name="sqlstr"></param> /// <returns></returns> public DataTable SqlQueryTab(string sqlstr) { return this.Db.Ado.GetDataTable(sqlstr); } }
3.繼承DbContext並根據業務的不同,對其進行擴展
public class 實體類名Manage:DbContext<實體類名> {
///擴展的方法 public void insertExt(實體類名 plan) { //to do... } }
4.因為每個實體類都要繼承DbContext,稍微大一點的系統,就會顯示很雜亂,這里我們建立 adoManage 對其進行統一的管理,當然,如果小伙伴要直接 new 一個實體也是可以的
以下 CardPlan ,Code 皆為實體類名,小伙伴可自行改名,也考慮利用反射來做
public class adoManage { public static CardPlanManage getCardPlanManage() { return new CardPlanManage(); } public static CodeManage getCodeManage() { return new CodeManage(); } }
5.調用 ,以上的代碼都完成 了的話,調用就很容易了
調用CardPlan的插入方法如下
adoManage.getCardPlanManage().Insert(planInfo);
如調用SqlSugar db里面的方法,即官方網站所用的一些示例的方法
adoManage.getCardPlanManage().Db.相關方法
** SqlSugar有自帶的代碼生成器,及實體類生成器,可自行到官網下載