支持復雜得sql查詢:(SimpleClient以面向對象的思維對單個對象進行增,刪,查,改得基礎操作),(SqlSugarClient對復雜得sql查詢,事務操作,如批量操作加事務)
1:在nuget里面下載SqlSugarCore.dll包
2:鏈接類
public class SqlsugarContext
{
//鏈接字符串
string conn = "Data Source=PC-202103271034\\SQLEXPRESS;Initial Catalog=dmscqdb;Persist Security Info=True;User ID=sa;Password=123456;Connect Timeout=500;";
//獲取操作數據庫得鏈接
public SqlSugarClient OpenConnection()
{
SqlSugarClient sqlSugarClient= new SqlSugarClient(new ConnectionConfig()
{
ConnectionString = conn,
DbType = DbType.SqlServer,
IsAutoCloseConnection = true,
InitKeyType = InitKeyType.SystemTable
});
sqlSugarClient.Aop.OnExecutingChangeSql = (sql, pars) =>
{
Console.WriteLine(sql);
return new KeyValuePair<string, SugarParameter[]>(sql, pars);
};
return sqlSugarClient;
}
}
3:對單表的基礎操作(做成一個泛型類,方便繼承)
public class SqlSugarDbGet<TEntity> where TEntity : class, new()
{
public SqlsugarContext _sqlsugarContext;
public SqlSugarDbGet(SqlsugarContext sqlsugarContext)
{
_sqlsugarContext = sqlsugarContext;
}
public static SimpleClient<TEntity> Getinstance => new SimpleClient<TEntity>(HttpContext.GetService<SqlsugarContext>().DB);
//批量添加
public bool AddRange(IEnumerable<TEntity> ts)
{
using (SqlSugarClient client = _sqlsugarContext.OpenConnection())
{
try
{
client.BeginTran();
int result = client.Insertable<TEntity>(ts).ExecuteCommand();
client.CommitTran();
return true;
}
catch (Exception e)
{
string msg = e.Message;
client.RollbackTran();
return false;
}
}
}
//批量修改
public bool UpdateRange(IEnumerable<TEntity> ts)
{
using (SqlSugarClient client = _sqlsugarContext.OpenConnection())
{
try
{
client.BeginTran();
int result = client .Updateable<TEntity>(ts).ExecuteCommand();
client.CommitTran();
return true;
}
catch (Exception e)
{
string msg = e.Message;
client.RollbackTran();
return false;
}
}
}
//批量刪除
public bool DeleteRange(IEnumerable<TEntity> ts)
{
using (SqlSugarClient client = _sqlsugarContext.OpenConnection())
{
try
{
client.BeginTran();
int result = client .Deleteable<TEntity>(ts).ExecuteCommand();
client.CommitTran();
return true;
}
catch (Exception e)
{
string msg = e.Message;
client.RollbackTran();
return false;
}
}
}
}
4:對復雜表的查詢
//以對象的方式進行查詢
using (SqlSugarClient client = _sqlsugarContext.OpenConnection())
{
var dss = client.Queryable<T1, T3, T4>((a, b, c) => new JoinQueryInfos(JoinType.Inner, a.id == b.t1id, JoinType.Inner, b.id == c.t3id)).Where(a => a.name == "666").Select((a, b, c) => new vtt()
{
id = a.id,
name1 = c.name4
}).ToList();
}
//以sql的方式進行查詢(呢種要用的多些,方便些)
using (SqlSugarClient client = _sqlsugarContext.OpenConnection())
{
int totalnum = 0;
int totalPage = 0;
sqlsugar在Queryable得時候采用得延遲加載,直接sql賽選和where后面賽選查詢條件差不多,只有轉tolist或者.count()得時候才會往返數據庫真正從數據庫獲取數據
//條件加載where得labdb后面
string sql = "select T3.id,T3.name1 from T1 join T3 on T1.id=T3.t1id";
List<vtt> datas = client.SqlQueryable<vtt>(sql).Where(m => 1 == 1).OrderBy(m => m.name1, SqlSugar.OrderByType.Desc).Select(m => new vtt { t1id = m.t1id }).ToPageList(1, 10, ref totalnum, ref totalPage);
//直接在sql里面加條件查詢
string sql1 = "select T3.id,T3.name1 from T1 join T3 on T1.id=T3.t1id where T3.name1=@name1";
List<vtt> datas1 = client.SqlQueryable<vtt>(sql1).AddParameters(new { name1 = "1122",ss="" }).Where(m => 1 == 1).OrderBy(m => m.name1, SqlSugar.OrderByType.Desc).Select(m => new vtt { t1id = m.t1id }).ToPageList(1, 10, ref totalnum, ref totalPage);
//按name1分組求t1id相加得和,name1 必須包含在分組GroupBy后面,不然不能查詢呢個字段
string sql = "select * from T3";
List<vtt> datas = client.SqlQueryable<vtt>(sql).Select(m => new vtt { t1id = SqlFunc.AggregateSum(m.t1id), name1 = m.name1 }).GroupBy(m=>m.name1).ToPageList(1, 10, ref totalnum, ref totalPage);
}