.net平台有不少orm框架,ef,dapper,hibernate等。EF太重,hibernate比较中庸且配置繁琐,dapper轻量但是对强类型的支持不是太好。相比较而言,sqlsugar轻量,且功能完善。
支持属性导航,懒加载,多表查询,linq,分页,AOP等,支持mssql、oracle、sqlite、mysql等主流数据库,使用非常简单,实例化dbclient即可。
1、安装
通过vs的nuget,搜索sqlsugar安装即可;或者通过github地址https://github.com/sunkaixuan/SqlSugar下载源码。
2、简单使用
1)实体类的定义,引用sqlsugar先。

sugartable特性,可以定义数据表的名字,使得实体类与数据表可以使用不同名称。
sugarcolumn特性,数据表列的属性:columnname定义列的名称,columndatatype定义列的数据类型如varchar\ numeric等,isignore非映射字段,isprimarykey主键,isidentity自增列。。。。
2)实例化dbclient
SqlSugarClient db= new SqlSugarClient(new ConnectionConfig() {
IsAutoCloseConnection = true, //自动关闭连接,建议开启
ConnectionString=ConnStr, //数据库连接字符串
InitKeyType= InitKeyType.Attribute,//从实体特性中读取主键自增列信息
DbType= DbType.Oracle //数据库类型
});
3)简单CURD
//查询ZW_LAST表所有
db.Queryable<Model.ZW_LAST>().ToList()
//使用sql语句填充实体类
db.SqlQueryable<Model.ZW_LAST>("select * from ZW_LAST")
//查询sucess字段为true,且lastdate列的最大值
db.Queryable<Model.ZW_LAST>().Where(l=>l.Sucess).Max(l=>l.LastDate);
//取前100条记录
db.Queryable<Model.ZW_LAST>().Take(100)
// in查询
var in1=db.Queryable<Model.ZW_LAST>().In(z=>z.lastdate,new string[] { "20191101","20191102" }).ToList();
//执行sql语句
db.Ado.ExecuteCommand("select * from sajet.zw_last")
//将强类型实例插入数据库,也可以传入list实现批量插入
db.Insertable<Model.ZW_LAST>(new Model.ZW_LAST(){.......}).ExecueCommand()
//根据主键删除
db.Deleteable<Model.ZW_LAST>().In("20191101").ExecueCommand()
//lambda表达式删除
db.Deleteable<Model.ZW_LAST>().Where(z=>z.LastDate=="2019101").ExecueCommand()
//传入实体,根据主键更新
db.Updateable<Model.ZW_LAST>(updateObj).ExecutCommand()
//传入实体,但根据非主键更新db.Updateable<Model.ZW_LAST(updateObj).Where(z=>z.WorkOrder=="w12").ExecutCommand()
//只更新workorder列
db.Updateable<Model.ZW_LAST(updateObj).UpdateColumns(z=> new {z.WorkOrder }).ExecuteCommand();
4)多表查询
//join查询
this.Db.Queryable<App, AppMoudle>(
(a, m) => new object[]
{
JoinType.Inner,a.MoudleID==m.MoudleID,
}
).Where((a, m) => a.IsBindProcess == false)
.Select((a, m) => new MenuTag
{
IsModule = false,
MenuID = a.AppID,
MenuText = a.Text,
RoleTypeChar = RoleTypeEnum.BASIC.ToString(),
TagAppName = a.Name,
TagModuleID = m.MoudleID,
TagAssmFileName = a.AssemblyFileName,
TagAssmSpace = a.AssemblySpace,
TagBasicRightsChar = "YYYYYYYYYYYYYY",
TagAppID = a.AppID
}).ToList()
//自由映射,并分页
this.Db.Queryable<Role>().Mapper((r, cache) =>
{
var allRights = cache.Get(list =>
{
var ids = list.Select(i => i.RoleID).ToList();
return this.Db.Queryable<RoleRights>()
.Where(rr => ids.Contains(rr.RoleID))
.Mapper(rr=>rr.RefApp,rr=>rr.RefApp.AppID)
.Mapper(rr=>rr.RefRole,rr=>rr.RefRole.RoleID)
.Mapper(rr=>rr.RefAms,rr=>rr.RefAms.MapID)
.ToList();
});
r.RefAppRighsts = allRights.Where(i => i.RoleID == r.RoleID).ToList();
}).ToPageList(pageIndex, pageCount, ref totalNumber, ref totalPage);
5)事务

6)存储过程





