华域联盟 .Net .net数据库操作框架SqlSugar的简单入门

.net数据库操作框架SqlSugar的简单入门

.net数据库操作框架SqlSugar的简单入门
 更新时间:2021年04月28日 10:02:26   作者:果糖大数据科技  

这篇文章主要介绍了.net数据库操作框架SqlSugar的简单入门,帮助大家更好的理解和学习使用.net技术,感兴趣的朋友可以了解下

目录介绍
框架新功能
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

.NET数据库框架源码  
官网地址:  www.donet5.com/Home/Doc
以上就是.net数据库操作框架SqlSugar的简单入门的详细内容,更多关于.net数据库操作框架SqlSugar的资料请关注华域联盟其它相关文章!

您可能感兴趣的文章:Asp.Net Core中创建多DbContext并迁移到数据库的步骤在.NetCore(C#)中使用ODP.NET Core+Dapper操作Oracle数据库浅谈如何使用vb.net从数据库中提取数据asp.net实现存储和读取数据库图片.NET Core Dapper操作mysql数据库的实现方法C# Ado.net实现读取SQLServer数据库存储过程列表及参数信息示例ASP.NET Core2读写InfluxDB时序数据库的方法教程ASP.NET WebAPI连接数据库的方法.net core利用orm如何操作mysql数据库详解.net core下配置访问数据库操作

.net
数据库框架
SqlSugar

相关文章
比较简单的将数据信息导入wrod文档方案(C# for word)史上最简单将数据信息导入wrod文档方案(C# for word) 2010-01-01
IE下document.referrer 拒绝访问的解决方法原理就是给IE浏览器的页面偷偷加了个链接,然后自动点这个链接,于是referrer就能保留了,感兴趣的朋友可以参考下 2013-09-09
System.Web中不存在类型或命名空间名称script 找不到System.Web.这篇文章主要为大家详细介绍了System.Web中不存在类型或命名空间名称script,找不到System.Web.Extensions.dll引用的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2017-04-04
asp.net MVC实现无组件上传图片实例介绍无组件实现上传图片使用input的file作为上传选择文件,具体实现如下:前后台代码很详细,感兴趣的朋友们可不要错过了哈 2013-05-05
asp.net jquery无刷新分页插件(jquery.pagination.js)采用Jquery无刷新分页插件jquery.pagination.js 实现无刷新分页效果:本示例Handler中采用StringBuilder的append方法追加HTML,小数据量可以,但是大数据或是布局常变,建议返回JSON格式的数据,性能和灵活性更好,望使用者好好把握 2013-01-01
asp.net跳转页面的三种方法比较asp.net下的三种转向页面的方法小结,给使用页面转向的朋友一个参考 2008-06-06
.NET微信扫码支付接入(模式二-NATIVE)这篇文章主要为大家详细介绍了.NET微信扫码支付接入的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2017-10-10
.net 像hao123的快捷邮箱登陆的实现代码.net实现的像hao123的快捷邮箱登陆的代码,需要的朋友可以参考下。 2010-03-03
asp.net 禁用viewstate在web.config里在web.config里设置禁用viewstate的代码。 2009-06-06
ASP.NET Core MVC获取请求的参数方法示例这篇文章主要给大家介绍了关于ASP.NET Core MVC是如何获取请求的参数,文中通过示例代码介绍的非常详细,对大家学习或者使用ASP.NET Core MVC具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧 2020-05-05

最新评论

本文由 华域联盟 原创撰写:华域联盟 » .net数据库操作框架SqlSugar的简单入门

转载请保留出处和原文链接:https://www.cnhackhy.com/4920.htm

本文来自网络,不代表华域联盟立场,转载请注明出处。

作者:

上一篇

已经没有了

发表回复

联系我们

联系我们

2551209778

在线咨询: QQ交谈

邮箱: [email protected]

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部