SqlSugar的基本使用
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有自带的代码生成器,及实体类生成器,可自行到官网下载