SqlSugar的优点就不在这里重复了。
一,Nuget 安装
SqlSugar是.NET版本,SqlSugarCore是.NET CORE版本,根据你的项目选择你的引用dll
二,简单使用
1.建立数据库连接
public SqlSugarClient GesmartDb()
{
SqlSugarClient Db = new SqlSugarClient(new ConnectionConfig()
{
ConnectionString = "Data Source=127.0.0.1,1433;Initial Catalog=xxx;User ID=sa;Password=1;Max Pool Size=1000;MultipleActiveResultSets=true;",//数据库连接串
DbType = DbType.SqlServer,
InitKeyType = InitKeyType.Attribute,//从特性读取主键和自增列信息
IsAutoCloseConnection = true,//开启自动释放模式和EF原理一样我就不多解释了
});
//用来打印Sql方便调式
Db.Aop.OnLogExecuting = (sql, pars) =>
{
//记录日志
SmartLog.WriteLog(sql + "\r\n" +
Db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));
};
return Db;
}
2.根据需求使用SQLSugar实现增删改查
using (SqlSugarClient db = commonDb.GesmartDb())
{
/*查询*/
var list = db.Queryable<StudentModel>().ToList();//查询所有
var getById = db.Queryable<StudentModel>().InSingle(1);//根据主键查询
var getByWhere = db.Queryable<StudentModel>().Where(it=>it.Id==1).ToList();//根据条件查询
var total = 0;
var getPage = db.Queryable<StudentModel>().Where(it => it.Id == 1).ToPageList(1,2,ref total);//根据分页查询
//多表查询用法 http://www.codeisbug.com/Doc/8/1124
/*插入*/
var data = new Student() { Name = "jack" };
db.Insertable(data).ExecuteCommand();
//更多插入用法 http://www.codeisbug.com/Doc/8/1130
/*更新*/
var data2 = new Student() { Id =1, Name = "jack" };
db.Updateable(data2).ExecuteCommand();
//更多更新用法 http://www.codeisbug.com/Doc/8/1129
/*删除*/
db.Deleteable<StudentModel>(1).ExecuteCommand();
//更多删除用法 http://www.codeisbug.com/Doc/8/1128
}
三,目前个人使用比较顺手的SQLSugar小技巧,直接上代码。
1.根据数据库生成实体类
using (SqlSugarClient db = commonDb.GesmartDb())
{
//直接生成数据库所有实体类,并识别自增长ID 生成类的文件夹地址D:\xxx\DbModels 生成类的命名空间 xxx_Entity
db.DbFirst.IsCreateAttribute().CreateClassFile(@"D:\xxx\DbModels", "xxx_Entity");
//生成数据库单个表的实体类,并识别自增长ID 生成类的文件夹地址D:\xxx\DbModels 生成类的命名空间 xxx_Entity
db.DbFirst.IsCreateAttribute().Where("Workcenter").CreateClassFile(@"D:\xxx\DbModels", "xxx_Entity");
}
2.直接执行SQL语句,由于老项目比较杠都是手写sql语句,所以sql语句都比较骚气,所以在用这个框架时还是忍不住骚一把。
using (SqlSugarClient db = commonDb.GesmartDb())
{
//获取插入后的自增长列
long i = db.Insertable(card).IgnoreColumns(c => new { c.FinishTime, c.LeaveTime, c.ArriveTime }).ExecuteReturnIdentity();
//递归查询,假装很骚
DataTable tbMobile = db.Ado.GetDataTable(@"WITH CTE AS
(SELECT xxx from xxx where DepartmentID=@departmentID and StatusID=@statusID)
SELECT xxx FROM xxx c INNER JOIN CTE t ON xxx", new List<SugarParameter>(){
new SugarParameter("@departmentID",11),
new SugarParameter("@statusID",2)
});
return new ResultInfo() { Message = i.ToString(), DateTime = DateTime.Now, Status = "200" };
}
--------------------END------------------------
后面使用发现有意思的再分享