暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ORM之sqlsugar使用

不想做程序员 2019-11-23
1299

    .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)存储过程


文章转载自不想做程序员,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论