记.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的主要内容,如果未能解决你的问题,请参考以下文章
NetCore 3.1 项目搭建反射依赖注入,Swagger结合Jwt,sqlSugar+EfCore异常中间件+Log4Net+MongoDb,Redis+Docker,丰富的公共类库,代码示例 下
.NET 6 WebApi 错误使用 Visual Studio 2022 当前