数据库操作框架SqlSugar的简单⼊门
⽬录
介绍
框架新功能
1、配置查询
1.1 创建测试数据
1.2 传统字典联表实现缺点
1.3 配置表简化字典联表
1.4 简单联表查询也可以配置
2、多租户+仓储+⾃动分配
3、⾏列互转功能 
介绍
SqlSugar是⼀款⽼牌 .NET数据库操作框架,由果糖⼤数据科技团队维护和更新,Github star数仅次于EF 和 Dapper 优点:简单易⽤、功能齐全、⾼性能、轻量级、服务齐全、有专业技术⽀持⼀天18⼩时服务
⽀持数据库:MySql、SqlServer、Sqlite、Oracle 、 postgresql、达梦、⼈⼤⾦仓
框架新功能
最新稳定版本5.0.2.8 ,发布后1个⽉时间NUGET下载量达到5000的版本,⽤户使⽤也相当满意
⽽在稳定版本的基础上⼜布了5.0.2.9版本
加⼊3⼤新功能
1. 配置查询
解决了⼤量字典表和简单就为取⼀个name 就要写联表的问题,让单表查询解决⼀切
2.多租户+仓储+⾃动分配
3.⾏转列
1、配置查询
解决了⼤量字典表和简单就为取⼀个name 就要写联表的问题,让单表查询解决⼀切
字典表我相信⼤家都全⽤到,他们可以⽅便的存储性别、学历、岗位等⼀串数据并进⾏TypeId进⾏区分
1.1 创建测试数据
创建⼀个字典实体
public class DataDictionary
{
public string Code { get; set; }
public string Name { get; set; }
public string Type { get; set; }
}
创建字典表并向⾥⾯插⼊测试数据 
var db = GetInstance();
List<DataDictionary> datas = new List<DataDictionary>();
datas.Add(new DataDictionary() { Code="1", Name="男",Type="sex" });
datas.Add(new DataDictionary() { Code = "2", Name = "⼥", Type = "sex" });
datas.Add(new DataDictionary() { Code = "1", Name = "南通市", Type = "city" });
datas.Add(new DataDictionary() { Code = "2", Name = "苏州市", Type = "city" });
datas.Add(new DataDictionary() { Code = "1", Name = "江苏省", Type = "province" });
datas.Add(new DataDictionary() { Code = "2", Name = "湖南省", Type = "province" });
db.CodeFirst.InitTables<DataDictionary>();//这样就能根据实体建表了
db.Insertable(datas).ExecuteCommand();//这样就能把数据插进数据库了<br>
在建⼀个Person表 
public class Person
{
//数据库字段
[SqlSugar.SugarColumn(IsPrimaryKey =true,IsIdentity =true)]
public int Id { get; set; }
public string Name { get; set; }
public int SexId { get; set; }
public int CityId { get; set; }
public int ProvinceId { get; set; }
/
/⾮数据库字段
[SqlSugar.SugarColumn(IsIgnore =true)]
public string SexName { get; set; }
[SqlSugar.SugarColumn(IsIgnore = true)]
public string CityName { get; set; }
[SqlSugar.SugarColumn(IsIgnore = true)]
public string ProviceName { get; set; }
} 
1.2 传统字典联表实现缺点
如果我们要将Person中的⾮数据字典查询出来那么我们就需要写有2种实现⽅式
1.连表或者⼦查询(缺点写起来很浪费时间)
2.将字典存到内存,通过内存赋值(缺点字典表超过1000条以上性能很差,并且不能排序,或者LIKE)下⾯介绍通过SqlSugar的配置查询解决上2⾯个难题
1.3 配置表简化字典联表
配置字典表
if (!db.ConfigQuery.Any())
{
var types= db.Queryable<DataDictionary>().Select(it => it.Type).Distinct().ToList();
foreach (var type in types)
{
db.ConfigQuery.SetTable<DataDictionary>(it => it.Code, it => it.Name, type, it => it.Type == type);
}
//如果其中Code都是唯⼀值可以按 1.4中的⽤法使⽤循环都不要
}
配置完我们查询就会很⽅便了
var res=db.Queryable<Person>().Select(it => new Person()
{
Id=it.Id.SelectAll(),
SexName=it.SexId.GetConfigValue<DataDictionary>("sex"),
ProvinceName = it.ProvinceId.GetConfigValue<DataDictionary>("province"),
CityName = it.CityId.GetConfigValue<DataDictionary>("city"),
}).ToList();
//也⽀持⽀持写在Where或者Orderby 
1.4 简单联表查询也可以配置
db.ConfigQuery.SetTable<Order>(it => it.Id, it => it.Name);//配置Order<br>
var list3 = db.Queryable<OrderItem>().Select(it => new OrderItem
{
ItemId = it.ItemId.SelectAll(),
OrderName = it.OrderId.GetConfigValue<Order>() //查询的时候直接⽤
}).ToList();
总结:配置表查询的⽅式可以⼤⼤降低重复联表问题,并且配置好后基本就不要写JOIN了 
2、多租户+仓储+⾃动分配
SqlSugar多租户是通过ConfigId进⾏识别连接哪个库,新版本添加了实体配置ConfigId [TenantAttribute("1")]
public class C1Table
{
public string Id { get; set; }
}
[TenantAttribute("2")]
public class C2Table
{
public string Id { get; set; }
}
下⾯我们仓储就可以通过实体配置⾃动识别是连接哪个库
public class Repository<T> : SimpleClient<T> where T : class, new()
{
public Repository(ISqlSugarClient context = null) : base(context)//注意这⾥要有默认值等于null
{
if (context == null)
{
var db = new SqlSugarClient(new List<ConnectionConfig> {
new ConnectionConfig()
{
ConfigId="1",
DbType = SqlSugar.DbType.SqlServer,
IsAutoCloseConnection = true,
ConnectionString = Config.ConnectionString
},
new ConnectionConfig()
{
ConfigId="2",
DbType = SqlSugar.DbType.SqlServer,
IsAutoCloseConnection = true,
ConnectionString = Config.ConnectionString2
}
});
base.Context = db;
var configId = typeof(T).GetCustomAttribute<TenantAttribute>().configId;
db.ChangeDatabase(configId);
}
}
/// <summary>
/// 扩展⽅法,⾃带⽅法不能满⾜的时候可以添加新⽅法
/// </summary>
/// <returns></returns>
public List<T> CommQuery(string sql)
{
//base.Context.Queryable<T>().ToList();可以拿到SqlSugarClient 做复杂操作
return base.Context.Queryable<T>().Where(sql).ToList();
}
}
新版本还添加了切换仓储功能
public class C1Service : Repository<C1Table>
{
public void Test()
{
base.AsTenant().BeginTran();
base.GetList(); //调⽤内部仓储⽅法
base.ChangeRepository<Repository<C2Table>>().GetList();//调⽤外部仓储
base.AsTenant().CommitTran();
}
}
3、⾏列互转功能 
第⼀个参数列名、第⼆个参数头⾏名、第三个参数值
var test06 = db.Queryable<Order>()
.ToPivotTable(it => it.Id, it => it.Name, it => it.Sum(x => x.Price));//返回Datatable
var test07 = db.Queryable<Order>()
.ToPivotList(it => it.Id, it => it.Name, it => it.Sum(x => x.Price));//返回List<dynamic><br>数据库简单吗
var test08 = db.Queryable<Order>()
.ToPivotJson(it => it.Id, it => it.Name, it => it.Sum(x => x.Price));//返回Json
以上就是数据库操作框架SqlSugar的简单⼊门的详细内容,更多关于数据库操作框架SqlSugar的资料请关注其它相关⽂章!