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",,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中的用法使用循环都不要 }
配置完我们查询就会很方便了