[开源ORM] SqliteSugar 3.x .net Core版本成功上线

SqliteSqlSugar 3.X API 

作为支持.NET CORE 为数不多的ORM之一,除了具有优越的性能外,还拥有强大的功能,不只是满足你的增,删,查和改。实质上拥有更多你想像不到的功能,当你需要实现某个功能时会发现有这个功能太棒了。

 

因为每个版本的贴子API都基本一致,所以我也说一些别的用法让大家更加了解该ORM

参数多元化的支持:

复制代码
//Queryable 支持 拉姆达 匿名参数  和字典参数 var list = db.Queryable<Student>().Where(it=>it.id==1).ToList(); var list2=db.Queryable<Student>().Where("id=@id", new { id = 1 }).ToList(); var list3 = db.Queryable<Student>().Where("id=@id", new Dictionary<string, object>() { {"id",1}}).ToList(); //原生Sql查询支持 匿名对象,SqlParameter和 字典 db.SqlQuery<Student>("select * from student where id=@id", new { id = 1 });
db.SqlQuery<Student>("select * from student where id=@id", new SqlParameter("@id",1));
db.SqlQuery<Student>("select * from student where id=@id", new Dictionary<string, object>() { { "id", 1 } }); //同上 //db.GetScalar() //db.ExecuteCommand() //db.GetInt()
//...
复制代码

 

SQL语句使用拉姆达的技巧

 db.Queryable<Student>("(select * from [Student] ) t").Where(it => it.name == "name").ToList();

注意: 这种写法  表名一定要加上关键字 不然应会让转释成 [(select * from [Student] ) t] 

Mssql表名关键字是 []

MySql表名关键字是``

Sqlite表名关键字是[]

ORACLE表名只要大写就可以了

 

 

所有版本

ASP.NET 4.0+ MSSQL https://github.com/sunkaixuan/SqlSugar

ASP.NET CORE MSSQL https://github.com/sunkaixuan/ASP_NET_CORE_ORM_SqlSugar

ASP.NET 4.0+ MYSQL https://github.com/sunkaixuan/MySqlSugar

ASP.NET CORE MYSQL https://github.com/sunkaixuan/ASP_NET_CORE_ORM_MySqlSugar

ASP.NET 4.0+ Sqlite https://github.com/sunkaixuan/SqliteSugar

ASP.NET CORE Sqlite https://github.com/sunkaixuan/ASP_NET_CORE_ORM_MySqlSugar

ASP.NET 4.0+ ORACLE https://github.com/sunkaixuan/OracleSugar

ASP.NET Core Oracle 等官方驱动代码已完成

优点

SqlSugar 是一款小巧,并且功能齐全的ORM,并不需要像Dapper一样依赖第三方扩展

SqlSugar 语法易用简单 ,有漂亮的拉姆达语法,也支持Dapper SQL和ADO.NET(存储过程等)的所有功能

SqlSugar 性能达到原生水准,远超 Dapper和EF CORE。

SqlSugar 支持.NET CORE , 多个数据库

SqlSugar 体积小巧只有150K是EF的30分之1 ,NUGET直接可以下载

 

连接数据库

1.简单用法

using(var db = new SqlSugarClient(ConnectionString)){

    //use object
    var list=db.Queryable<T>().ToList();

}

 

2.打包用法,推荐

复制代码
/// <summary>
/// SqlSugar
/// </summary>
public class SugarDao
{
    private SugarDao()
    {

    }
    public static string ConnectionString
    {
        get {
            string reval = "server=.;uid=sa;pwd=sasa;database=SqlSugarTest"; 
            return reval;
        }
    }
    public static SqlSugarClient GetInstance()
    {
        var db = new SqlSugarClient(ConnectionString);
        db.IsEnableLogEvent = true;//Enable log events
        db.LogEventStarting = (sql, par) => { Console.WriteLine(sql + " " + par+"\r\n"); };
        return db;
    }
}
复制代码

使用打包对象

using (var db = SugarDao.GetInstance())
{
    var list=db.Queryable<T>().ToList();
}

 

3.高级玩法,基于IOC和指挥官模式的DEMO

https://github.com/sunkaixuan/ASPNETMVCCRUDDEMO

 

查询

1. Queryable 拉姆达查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
//查询所有
 var student = db.Queryable<Student>().ToList();
 var studentDynamic = db.Queryable<Student>().ToDynamic();
 var studentJson = db.Queryable<Student>().ToJson();
 
 
 //查询单条
 var single = db.Queryable<Student>().Single(c => c.id == 1);
 //查询单条根据主键
 var singleByPk = db.Queryable<Student>().InSingle(1);
 //查询单条没有记录返回空对象
 var singleOrDefault = db.Queryable<Student>().SingleOrDefault(c => c.id == 11111111);
 //查询单条没有记录返回空对象
 var single2 = db.Queryable<Student>().Where(c => c.id == 1).SingleOrDefault();
 
 //查询第一条
 var first = db.Queryable<Student>().Where(c => c.id == 1).First();
 var first2 = db.Queryable<Student>().Where(c => c.id == 1).FirstOrDefault();
 
 //取11-20条
 var page1 = db.Queryable<Student>().Where(c => c.id > 10).OrderBy(it => it.id).Skip(10).Take(10).ToList();
 
 //取11-20条  等于 Skip(pageIndex-1)*pageSize).Take(pageSize) 等于  between (pageIndex-1)*pageSize and  pageIndex*pageSize
 var page2 = db.Queryable<Student>().Where(c => c.id > 10).OrderBy(it => it.id).ToPageList(2, 10);
 
 //查询条数
 var count = db.Queryable<Student>().Where(c => c.id > 10).Count();
 
 //从第2条开始以后取所有
 var skip = db.Queryable<Student>().Where(c => c.id > 10).OrderBy(it => it.id).Skip(2).ToList();
 
 //取前2条
 var take = db.Queryable<Student>().Where(c => c.id > 10).OrderBy(it => it.id).Take(2).ToList();
 
 //Not like
 string conval = "a";
 var notLike = db.Queryable<Student>().Where(c => !c.name.Contains(conval.ToString())).ToList();
 
 //Like
 conval = "三";
 var like = db.Queryable<Student>().Where(c => c.name.Contains(conval)).ToList();
 
 //支持字符串Where 让你解决,更复杂的查询
 var student12 = db.Queryable<Student>().Where(c => "a" == "a").Where("id>@id", new { id = 1 }).ToList();
 var student13 = db.Queryable<Student>().Where(c => "a" == "a").Where("id>100 and id in( select 1)").ToList();
 
 
 //存在记录反回true,则否返回false
 bool isAny100 = db.Queryable<Student>().Any(c => c.id == 100);
 bool isAny1 = db.Queryable<Student>().Any(c => c.id == 1);
 
 
 //获取最大Id
 object maxId = db.Queryable<Student>().Max(it => it.id);
 int maxId1 = db.Queryable<Student>().Max(it => it.id).ObjToInt();//拉姆达
 int maxId2 = db.Queryable<Student>().Max<int>("id"); //字符串写法
 
 //获取最小
 int minId1 = db.Queryable<Student>().Where(c => c.id > 0).Min(it => it.id).ObjToInt();//拉姆达
 int minId2 = db.Queryable<Student>().Where(c => c.id > 0).Min<int>("id");//字符串写法
 
 
 //order By
 var orderList = db.Queryable<Student>().OrderBy("id desc,name asc").ToList();//字符串支持多个排序
 //可以多个order by表达示
 var order2List = db.Queryable<Student>().OrderBy(it => it.name).OrderBy(it => it.id, OrderByType.desc).ToList(); // order by name as ,order by id desc
 
 //In
 var intArray = new[] { "5", "2", "3" };
 var intList = intArray.ToList();
 var listnew = db.Queryable<Student>().Where(it => intArray.Contains(it.name)).ToList();
 var list0 = db.Queryable<Student>().In(it => it.id, 1, 2, 3).ToList();
 var list1 = db.Queryable<Student>().In(it => it.id, intArray).ToList();
 var list2 = db.Queryable<Student>().In("id", intArray).ToList();
 var list3 = db.Queryable<Student>().In(it => it.id, intList).ToList();
 var list4 = db.Queryable<Student>().In("id", intList).ToList();
 var list6 = db.Queryable<Student>().In(intList).ToList();//不设置字段默认主键
 
 //分组查询
 var list7 = db.Queryable<Student>().Where(c => c.id < 20).GroupBy(it => it.sex).Select("sex,count(*) Count").ToDynamic();
 var list8 = db.Queryable<Student>().Where(c => c.id < 20).GroupBy(it => it.sex).GroupBy(it => it.id).Select("id,sex,count(*) Count").ToDynamic();
 List<StudentGroup> list9 = db.Queryable<Student>().Where(c => c.id < 20).GroupBy(it => it.sex).Select<StudentGroup>("Sex,count(*) Count").ToList();
 List<StudentGroup> list10 = db.Queryable<Student>().Where(c => c.id < 20).GroupBy("sex").Select<StudentGroup>("Sex,count(*) Count").ToList();
 //SELECT Sex,Count=count(*)  FROM Student  WHERE 1=1  AND  (id < 20)    GROUP BY Sex --生成结果
 
 
 
 //2表关联查询
 var jList = db.Queryable<Student>()
 .JoinTable<School>((s1, s2) => s1.sch_id == s2.id) //默认left join
 .Where<School>((s1, s2) => s1.id == 1)
 .Select("s1.*,s2.name as schName")
 .ToDynamic();
 
 /*等于同于
  SELECT s1.*,s2.name as schName
  FROM [Student]  s1
  LEFT JOIN [School]  s2 ON  s1.sch_id  = s2.id
  WHERE  s1.id  = 1 */
 
 //2表关联查询并分页
 var jList2 = db.Queryable<Student>()
 .JoinTable<School>((s1, s2) => s1.sch_id == s2.id) //默认left join
     //如果要用inner join这么写
     //.JoinTable<School>((s1, s2) => s1.sch_id == s2.id ,JoinType.INNER)
 .Where<School>((s1, s2) => s1.id > 1)
 .OrderBy(s1 => s1.name)
 .Skip(10)
 .Take(20)
 .Select("s1.*,s2.name as schName")
 .ToDynamic();
 
 //3表查询并分页
 var jList3 = db.Queryable<Student>()
.JoinTable<School>((s1, s2) => s1.sch_id == s2.id) // left join  School s2  on s1.id=s2.id
.JoinTable<School>((s1, s3) => s1.sch_id == s3.id) // left join  School s3  on s1.id=s3.id
.Where<School>((s1, s2) => s1.id > 1)  // where s1.id>1
.Where(s1 => s1.id > 0)
.OrderBy<School>((s1, s2) => s1.id) //order by s1.id 多个order可以  .oderBy().orderby 叠加
.Skip(10)
.Take(20)
.Select("s1.*,s2.name as schName,s3.name as schName2")//select目前只支持这种写法
.ToDynamic();
 
 
 //上面的方式都是与第一张表join,第三张表想与第二张表join写法如下
 List<V_Student> jList4 =
  db.Queryable<Student>()
  .JoinTable<School>((s1, s2) => s1.sch_id == s2.id) // left join  School s2  on s1.id=s2.id
  .JoinTable<School, Area>((s1, s2, a1) => a1.id == s2.AreaId)// left join  Area a1  on a1.id=s2.AreaId  第三张表与第二张表关联
  .JoinTable<Area, School>((s1, a1, s3) => a1.id == s3.AreaId)// left join  School s3  on a1.id=s3.AreaId  第四第表第三张表关联
  .JoinTable<School>((s1, s4) => s1.sch_id == s4.id) // left join  School s2  on s1.id=s4.id
  .Select<School, Area, V_Student>((s1, s2, a1) => new V_Student { id = s1.id, name = s1.name, SchoolName = s2.name, AreaName = a1.name }).ToList();
 
 //等同于
 //SELECT id = s1.id, name = s1.name, SchoolName = s2.name, AreaName = a1.name 
 //FROM [Student]   s1
 //LEFT JOIN School  s2 ON  ( s1.sch_id  = s2.id )   
 //LEFT JOIN Area  a1 ON  ( a1.id  = s2.AreaId )     //第三张表与第二张表关联
 //LEFT JOIN School  s3 ON  ( a1.id  = s3.AreaId )   //第四张表与第三张表关联
 //LEFT JOIN School  s4 ON  ( s1.sch_id  = s4.id )   
 //WHERE 1=1   
 
 
 //Join子查询语句加分页的写法
 var childQuery = db.Queryable<Area>().Where("id=@id").Select(it => new { id = it.id }).ToSql();//创建子查询SQL
 string childTableName =SqlSugarTool.PackagingSQL(childQuery.Key);//将SQL语句用()包成表
 var queryable = db.Queryable<Student>()
  .JoinTable<School>((s1, s2) => s1.sch_id == s2.id)  //LEFT JOIN School  s2 ON  ( s1.sch_id  = s2.id ) 
  .JoinTable(childTableName, "a1", "a1.id=s2.areaid", new { id = 1 }, JoinType.INNER) //INNER JOIN (SELECT *  FROM [Area]   WHERE 1=1  AND id=@id   ) a1 ON a1.id=s2.areaid
  .OrderBy(s1 => s1.id);
 
 var list = queryable.Select<School, Area, V_Student>((s1, s2, a1) => new V_Student { id = s1.id, name = s1.name, SchoolName = s2.name, AreaName = a1.name })
     .ToPageList(0, 200);
 var count2 = queryable.Count();
 
 
 //拼接例子
 var queryable2 = db.Queryable<Student>().Where(it => true);
 if (maxId.ObjToInt() == 1)
 {
     queryable2.Where(it => it.id == 1);
 }
 else
 {
     queryable2.Where(it => it.id == 2);
 }
 var listJoin = queryable2.ToList();
 
 
 //queryable和SqlSugarClient解耦
 var par = new Queryable<Student>().Where(it => it.id == 1);//声名没有connection对象的Queryable
 par.DB = db;
 var listPar = par.ToList();
 
 
 //查看生成的sql和参数
 var id = 1;
 var sqlAndPars = db.Queryable<Student>().Where(it => it.id == id).OrderBy(it => it.id).ToSql();
 
 
 
 //拉姆达支持的函数操作
 var par1 = "2015-1-1"; var par2 = "   我 有空格A, ";
 var r1 = db.Queryable<Student>().Where(it => it.name == par1.ObjToString()).ToList(); //ObjToString会将null转转成""
 var r2 = db.Queryable<InsertTest>().Where(it => it.d1 == par1.ObjToDate()).ToList();
 var r3 = db.Queryable<InsertTest>().Where(it => it.id == 1.ObjToInt()).ToList();//ObjToInt会将null转转成0
 var r4 = db.Queryable<InsertTest>().Where(it => it.id == 2.ObjToDecimal()).ToList();
 var r5 = db.Queryable<InsertTest>().Where(it => it.id == 3.ObjToMoney()).ToList();
 var r6 = db.Queryable<InsertTest>().Where(it => it.v1 == par2.Trim()).ToList();
 var convert1 = db.Queryable<Student>().Where(c => c.name == "a".ToString()).ToList();
 var convert2 = db.Queryable<Student>().Where(c => c.id == Convert.ToInt32("1")).ToList();
 var convert3 = db.Queryable<Student>().Where(c => c.name == par2.ToLower()).ToList();
 var convert4 = db.Queryable<Student>().Where(c => c.name == par2.ToUpper()).ToList();
 var convert5= db.Queryable<Student>().Where(c => DateTime.Now > Convert.ToDateTime("2015-1-1")).ToList();
 var c1 = db.Queryable<Student>().Where(c => c.name.Contains("a")).ToList();
 var c2 = db.Queryable<Student>().Where(c => c.name.StartsWith("a")).ToList();
 var c3 = db.Queryable<Student>().Where(c => c.name.EndsWith("a")).ToList();
 var c4 = db.Queryable<Student>().Where(c => !string.IsNullOrEmpty(c.name)).ToList();
 var c5 = db.Queryable<Student>().Where(c => c.name.Equals("小杰")).ToList();
 var c6 = db.Queryable<Student>().Where(c => c.name.Length > 4).ToList();
 var time = db.Queryable<InsertTest>().Where(c => c.d1>DateTime.Now.AddDays(1)).ToList();
 var time2 = db.Queryable<InsertTest>().Where(c => c.d1 > DateTime.Now.AddYears(1)).ToList();
 var time3 = db.Queryable<InsertTest>().Where(c => c.d1 > DateTime.Now.AddMonths(1)).ToList();


2. SqlQuery 原生SQL查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//转成list
List<Student> list1 = db.SqlQuery<Student>("select * from Student");
//转成list带参
List<Student> list2 = db.SqlQuery<Student>("select * from Student where id=@id", new { id = 1 });
//转成dynamic
dynamic list3 = db.SqlQueryDynamic("select * from student");
//转成json
string list4 = db.SqlQueryJson("select * from student");
//返回int
var list5 = db.SqlQuery<int>("select id from Student limit 0,1").SingleOrDefault();
//反回键值
Dictionary<string, string> list6 = db.SqlQuery<KeyValuePair<string, string>>("select id,name from Student").ToDictionary(it => it.Key, it => it.Value);
//反回List<string[]>
var list7 = db.SqlQuery<string[]>("select  id,name from Student limit 0,1").SingleOrDefault();
//存储过程
//var spResult = db.SqlQuery<School>("exec sp_school @p1,@p2", new { p1 = 1, p2 = 2 });
 
//存储过程加Output
//var pars = SqlSugarTool.GetParameters(new { p1 = 1,p2=0 }); //将匿名对象转成SqlParameter
//db.IsClearParameters = false;//禁止清除参数
//pars[1].Direction = ParameterDirection.Output; //将p2设为 output
//var spResult2 = db.SqlQuery<School>("exec sp_school @p1,@p2 output", pars);
//db.IsClearParameters = true;//启用清除参数
//var outPutValue = pars[1].Value;//获取output @p2的值
 
 
////存储过程优化操作
//var pars2 = SqlSugarTool.GetParameters(new { p1 = 1, p2 = 0 }); //将匿名对象转成SqlParameter
//db.CommandType = CommandType.StoredProcedure;//指定为存储过程可比上面少写EXEC和参数
//var spResult3 = db.SqlQuery<School>("sp_school", pars2);
//db.CommandType = CommandType.Text;//还原回默认
 
 
//获取第一行第一列的值
string v1 = db.GetString("select '张三' as name");
int v2 = db.GetInt("select 1 as name");
double v3 = db.GetDouble("select 1 as name");
decimal v4 = db.GetDecimal("select 1 as name");


3.Sqlable 高级SQL拼接器

 View Code

 

 

插入

支持了高性能批量插入,让你事办功倍

复制代码
 db.Insert(GetInsertItem()); //插入一条记录 (有主键也好,没主键也好,有自增列也好都可以插进去)  db.InsertRange(GetInsertList()); //批量插入 支持(别名表等功能)  db.SqlBulkCopy(GetInsertList()); //批量插入 适合海量数据插入



                //设置不插入列
                db.DisableInsertColumns = new string[] { "sex" };//sex列将不会插入值
                Student s = new Student()
                {
                    name = "张" + new Random().Next(1, int.MaxValue),
                    sex = "gril" };

                var id = db.Insert(s); //插入

                //查询刚插入的sex是否有值
                var sex = db.Queryable<Student>().Single(it => it.id == id.ObjToInt()).sex;//无值
                var name = db.Queryable<Student>().Single(it => it.id == id.ObjToInt()).name;//有值


                //SqlBulkCopy同样支持不挺入列设置
                db.SqlBulkCopy(GetInsertList());
复制代码

 

 

更新

复制代码
                //指定列更新
                db.Update<School>(new { name = "蓝翔14" }, it => it.id == 14); //只更新name列
                db.Update<School, int>(new { name = "蓝翔11 23 12", areaId = 2 }, 11, 23, 12);
                db.Update<School, string>(new { name = "蓝翔2" }, new string[] { "11", "21" });
                db.Update<School>(new { name = "蓝翔2" }, it => it.id == 100);
                var array=new int[]{1,2,3};
                db.Update<School>(new { name = "蓝翔2" }, it => array.Contains(it.id));// id in 1,2,3


                //支持字典更新,适合动态权限
                var dic = new Dictionary<string, string>();
                dic.Add("name", "第十三条");
                dic.Add("areaId", "1");
                db.Update<School, int>(dic, 13);


                //整个实体更新
                db.Update(new School { id = 16, name = "蓝翔16", AreaId = 1 });
                db.Update<School>(new School { id = 12, name = "蓝翔12", AreaId = 2 }, it => it.id == 18);
                db.Update<School>(new School() { id = 11, name = "青鸟11" });

                //设置不更新列
                db.DisableUpdateColumns = new string[] { "CreateTime" };//设置CreateTime不更新  TestUpdateColumns updObj = new TestUpdateColumns()
                {
                    VGUID = Guid.Parse("542b5a27-6984-47c7-a8ee-359e483c8470"),
                    Name = "xx",
                    Name2 = "xx2",
                    IdentityField = 0,
                    CreateTime = null };

                //CreateTime将不会被更新  db.Update(updObj);
                //以前实现这种更新需要用指定列的方式实现,现在就简单多了。



                //批量更新   数据量小时建议使用
                var updateResult = db.UpdateRange(GetUpdateList());

                //批量更新  数据量大时建议使用
                var updateResult2 = db.SqlBulkReplace(GetUpdateList2());
复制代码

 

删除

复制代码
                //删除根据主键
                db.Delete<School, int>(10);

                //删除根据表达示
                db.Delete<School>(it => it.id > 100);//支持it=>array.contains(it.id)
 
                //主键批量删除
                db.Delete<School, string>(new string[] { "100", "101", "102" });

                //非主键批量删除
                db.Delete<School, string>(it => it.name, new string[] { "" });
                db.Delete<School, int>(it => it.id, new int[] { 20, 22 });


                //根据实体赋值实体一定要有主键,并且要有值。
                db.Delete(new School() { id = 200 });

                //根据字符串删除
                db.Delete<School>("id=@id", new { id = 100 });

                //假删除
                //db.FalseDelete<school>("is_del", 100);
                //等同于 update school set is_del=1 where id in(100)
                //db.FalseDelete<school>("is_del", it=>it.id==100);
复制代码

 

 

 更多功能

1、枚举支持

 View Code

 

2、实体生成加T4

View Code

使用T4

详细教程:

http://www.cnblogs.com/sunkaixuan/p/5751503.html

 

 

3、ADO.NET

复制代码
                var r1 = db.GetDataTable("select * from student");
                var r2 = db.GetSingle<Student>("select  * from student LIMIT 0,1");
                var r3 = db.GetScalar("select  count(1) from student");
                var r4 = db.GetReader("select  count(1) from student");
                r4.Dispose();
                var r5 = db.GetString("select   name from student LIMIT 0,1");
                var r6 = db.ExecuteCommand("select 1");


                //参数支持
                var p1 = db.GetDataTable("select * from student where id=@id", new {id=1 });
                var p2 = db.GetDataTable("select * from student where id=@id", new Dictionary<string, object>() { { "id", "1" } });//目前只支持 Dictionary<string, object>和Dictionary<string, string>
                var p3 = db.GetDataTable("select * from student where id=@id", new MySqlParameter("@id",1) );
复制代码

 

4、日志记录功能

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NewTest.Dao;
using Models;
using System.Data.SqlClient;
using MySqlSugar;

namespace NewTest.Demos
{
    //日志记录功能
    public class Log : IDemos
    {
       
        public void Init()
        {
            Console.WriteLine("启动Log.Init");
            using (var db = SugarDemoDao.GetInstance())
            {

                var a1 = db.Queryable<Student>().Where(it => it.id == 1).ToList();
                var a2 = db.Queryable<Student>().OrderBy(it => it.id).ToList();
            }
        }

        public class SugarConfigs
        {
            public static Action<string, string> LogEventStarting = (sql, pars) => {
                Console.WriteLine("starting:" + sql + " " + pars);
                
                using (var db = SugarDemoDao.GetInstance())
                {
                    //日志记录件事件里面用到数据库操作 IsEnableLogEvent一定要为false否则将引起死循环,并且要新开一个数据实例 像我这样写就没问题。
                    db.IsEnableLogEvent = false;
                    db.ExecuteCommand("select 1");
                }
            };
            public static Action<string, string> LogEventCompleted = (sql, pars) => {
                Console.WriteLine("completed:" + sql + " " + pars);
            };
        }

        /// <summary>
        /// SqlSugar
        /// </summary>
        public class SugarDemoDao
        {

            public static SqlSugarClient GetInstance()
            {
                var db = new SqlSugarClient(SugarDao.ConnectionString);
                db.IsEnableLogEvent = true;//启用日志事件
                db.LogEventStarting = SugarConfigs.LogEventStarting;
                db.LogEventCompleted = SugarConfigs.LogEventCompleted;
                return db;
            }
        }
    }
}
复制代码

 

5、别名表功能

 View Code

 

6别名列功能

 View Code

 

7通过属性来设置别名表和别名列

 View Code

 

 

8、行列过滤 (行过滤器可以设置多个,以逗号隔开)

 View Code

 

 

9、自动排除非数据库列

 View Code

 

10、事务

复制代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using NewTest.Dao; using Models; using System.Data.SqlClient; using MySqlSugar; namespace NewTest.Demos
{ //事务 public class Tran : IDemos
    { public void Init()
        {
            Console.WriteLine("启动Tran.Init"); using (SqlSugarClient db = SugarDao.GetInstance())//开启数据库连接  {
                db.IsNoLock = true;//启用无锁查询 db.CommandTimeOut = 30000;//设置超时时间 try {
                    db.BeginTran();//开启事务 //db.BeginTran(IsolationLevel.ReadCommitted);+3重载可以设置事世隔离级别  db.CommitTran();//提交事务  } catch (Exception)
                {
                    db.RollbackTran();//回滚事务 throw;
                }
            }
        }
    }
}
复制代码

 

11、流水号功能

 View Code

 

12添加VS知能提示,让你立马上手。

延伸阅读

告别“老顽固”-Java培训,做最负责任的教育,学习改变命运,软件学习,再就业,大学生如何就业,帮大学生找到好工作,lphotoshop培训,电脑培训,电脑维修培训,移动软件开发培训,网站设计培训,网站建设培训告别“老顽固”