记.Net 6 WebApi使用SqlSugar

Posted 菜鸟Coco

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记.Net 6 WebApi使用SqlSugar相关的知识,希望对你有一定的参考价值。

SQL Sugar 的功能还是非常强大的,具体的不再赘述,见官方文档:SqlSugar ORM 5.X 官网 、文档、教程 - SqlSugar 5x - .NET果糖网

 项目使用SqlSugar遇到的有些问题,在此记录一下。

依赖注入

 刚开始在项目中Program.cs写的注入代码如下:

//注入数据库连接
builder.Services.AddScoped(db =>

    return new SqlSugarClient(new ConnectionConfig()
    
        ConnectionString = builder.Configuration.GetConnectionString("ConnectString"),
        DbType = DbType.mysql,
        IsAutoCloseConnection = true,
    );
);

结果程序运行的时候报错如下:

Some services are not able to be constructed (Error while validating the service descriptor 'ServiceType: *BLL Lifetime: Scoped ImplementationType: *BLL': Unable to resolve service for type 'SqlSugar.ISqlSugarClient' while attempting to activate '*DAL'.)

然后开始查照各种帖子,找了好久都找不到问题导体出在哪,然后在一篇帖子中看到了,在注入时加入<ISqlSugarClient>,然后就在代码里也家上试了一下,果然可以了,正确代码如下:

builder.Services.AddScoped<ISqlSugarClient>(db =>

    return new SqlSugarClient(new ConnectionConfig()
    
        ConnectionString = builder.Configuration.GetConnectionString("ConnectString"),
        DbType = DbType.MySql,
        IsAutoCloseConnection = true,
    );
);

 我这里使用的是SqlSugarClient,如果使用的是Scop模式,声明的时候使用SqlSugarScope即可。

builder.Services.AddSingleton<ISqlSugarClient>(db =>

    return new SqlSugarScope(
               new ConnectionConfig()
               
                   DbType = SqlSugar.DbType.SqlServer,
                   ConnectionString =         builder.Configuration.GetConnectionString("ConnectString"),
                   IsAutoCloseConnection = true,
               );
);

官方的注入方式如下,这种方式需要在WebApi中引入Nuget: SqlSugar.IOC,之后才能在progarm.cs中识别到AddSqlSugar()方法。

builder.Services.AddSqlSugar(new IocConfig()

    ConnectionString = "server=.;uid=sa;pwd=haosql;database=SQLSUGAR4XTEST",
    DbType = IocDbType.SqlServer,
    IsAutoCloseConnection = true//自动释放
);

在DAL中使用时,可以直接通过构造函数注入的方式使用:

 public class TestDAL //: IDisposable
    
        public readonly ISqlSugarClient _dbClient;
        public TestDAL(ISqlSugarClient dbClient)
        
            _dbClient = dbClient;
        

//列表查询
public List<tb_test> List()
        
            var query = _dbClient.Queryable<tb_test>().ToList();

            return query;
        

示例中是简单的列表查询,其他的增删改等功能详见官方操作文档:基本查询 - SqlSugar 5x - .NET果糖网

参考文章连接:NET Core 6 .0 配置 SqlSugar_加点孜然.的博客-CSDN博客_services.getservice<isqlsugarclient>().getconneczai

.NET Core实战项目:WEB API

项目介绍

以个人博客项目为例,做一个WEB API,通过三层架构,实现模型、数据访问、业务的分离。

界面展示如下:

使用sqlsugar

网站:SqlSugar ORM 5.X 官网 、文档、教程 - SqlSugar 5x - .NET果糖网

SqlSugar是一款 老牌 .NET 开源ORM框架,由果糖大数据科技团队维护和更新 ,

1.  .NET中唯一支持全自动分表组件,SAAS分库,大数据处理的ORM

2.  .NET 百万级写入、更新  性能最强框架

3.  使用最简单的ORM 【文档,视频教程

4.媲美原生的极限的性能

5.Github star数仅次于EF 和 Dapper,每月nuget下载量超过1万

更多优点: 简单易用、功能齐全、高性能、轻量级、服务齐全、官网教程文档、有专业技术支持一天18小时服务

支持数据库MySql、SqlServer、Sqlite、Oracle 、 postgresql、达梦、人大金仓、神通数据库

在vs中引入该框架过程如下:

 安装即可

建立模型:Models

通过codefirst建立数据库模型,这样就省去了用指令建立数据库的麻烦,且易于供他人学习。

使用.NET5建立一个类:

 

主要有两大类模型:Models和DTO;

models如下:

通过抽象,我们可以找出所有模型的几个基本特征,并由此建立一个基础模型类

public class BaseId
  
    [SugarColumn(IsIdentity=true, IsPrimaryKey=true)]
    public int Id  get; set; 
  

增填其他类:

 public class BlogNews:BaseId
  
    //nvarchar带中文比较好
    [SugarColumn(ColumnDataType ="nvarchar(30)")]
    public string Title  get; set; 
    [SugarColumn(ColumnDataType ="text")]
    public string Content  get; set; 
    public DateTime Time  get; set; 
    public int BrowseCount  get; set; 
    public int LikeCount  get; set; 

    public int TypeId  get; set; 
    public int WriterId  get; set; 
    /// <summary>
    /// 类型,不映射到数据库
    /// </summary>
    [SugarColumn(IsIgnore =true)]
    public TypeInfo TypeInfo  get; set; 

    [SugarColumn(IsIgnore = true)]
    public WriterInfo WriterInfo  get; set; 
  

IsIgnore=true代表不映射到数据库,以后用导航查询处理。同时,也可以用于连表查询。

 public class TypeInfo:BaseId
  
    [SugarColumn(ColumnDataType ="nvarchar(12)")]
    public string Name  get; set; 
  

nvarchar对中文字符友好

 public class WriterInfo:BaseId
  
    [SugarColumn(ColumnDataType ="nvarchar(12)")]
    public string Name  get; set; 
    [SugarColumn(ColumnDataType = "nvarchar(16)")]
    public string UserName  get; set; 
    [SugarColumn(ColumnDataType = "nvarchar(64)")]
    public string UserPwd  get; set; 
  

建立模型:DTO

DTO层一定要遵循C#扁平化原则:没有对象,最多是系统对象。

 public class WriterDTO
  
    public int Id  get; set; 
    public string Name  get; set; 
    public string UserName  get; set; 
  
public class BlogNewsDTO
  
    public int Id  get; set; 
    public string Title  get; set; 
    public string Content  get; set; 
    public DateTime Time  get; set; 
    public int BrowseCount  get; set; 
    public int LikeCount  get; set; 
    public int TypeId  get; set; 
    public int WriterId  get; set; 
    public string TypeName  get; set; 
    public string WriterName  get; set; 
  

以上是关于记.Net 6 WebApi使用SqlSugar的主要内容,如果未能解决你的问题,请参考以下文章

.NET SAAS 架构与设计 -SqlSugar ORM

NetCore 3.1 项目搭建反射依赖注入,Swagger结合Jwt,sqlSugar+EfCore异常中间件+Log4Net+MongoDb,Redis+Docker,丰富的公共类库,代码示例 下

.NET 6 WebApi 错误使用 Visual Studio 2022 当前

.NET 5 ORM 八大实用技巧 干货 - SqlSugar ORM

使用SqlSugar结合MySql开发

SqlSugar入门到熟练使用 : SqlSugar ORM介绍和ORM对象创建