一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第4天,点击查看活动详情。
对于.NET开发者来说,ORM框架一般都会采用EFCore,但我并不喜欢用,其实这个官方的ORM已经被优化的很好了,比EF也轻量了很多,但他的数据迁移不好用,而且还会生成一堆文件,配置起来也一大堆代码。所以尝试找一款新的ORM代替它,于是就找到了SqlSugar!
我的需求很简单:
- 简单易用、性能不要太拉胯(能保证中小型项目跑流程即可)
- 文档要齐全,这个对后期问题排查太重要了
- 用户广泛,这样公开的论坛资料博客才会更多
- 能自动 创建/更新 数据库/表
.....
SqlSugar基本都满足了,那就开始试用
首先创建一个WebApi项目
选择.NET5.0框架(6.0也可以,我本地是vs2019,不支持,所以只能选择5.0了)
添加NuGet包:SqlSugarCore
创建一个实体类(用于创建数据表)
可以使用vs快捷键 添加新项:
Shift + Alt + C
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace SugarTest
{
/// <summary>
/// 学生表
/// </summary>
public class Students
{
public string Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string Happy { get; set; }
}
}
项目目录下创建一个cs文件,用于放置SqlSugar初始化配置代码
using Microsoft.Extensions.DependencyInjection;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace SugarTest
{
public class SqlSugarSetup
{
public static SqlSugarClient db
{
get
{
return new SqlSugarClient(new ConnectionConfig()
{
ConnectionString = "xxxxxxx",//数据库连接字符串
DbType = DbType.SqlServer,//DbType支持Mysql、SqlServer、Sqlite、Oracle、PostgreSQL等多种数据库
IsAutoCloseConnection = true,//自动释放
});
}
}
public static void Init(IServiceCollection services)
{
//自动创建数据库
db.DbMaintenance.CreateDatabase();//如果不存在创建数据库
//采用Codefirst方式
//设置varchar类型 字段默认长度为200
//也就是string类型的字段长度给一个默认长度,节省数据空间
//如果有多张表需要初始化,上句可重复写,或者批量初始化(后面会写到...)
db.CodeFirst.SetStringDefaultLength(200).InitTables(typeof(Students));//创建数据表
//单例注入,方便控制器或其他类中使用数据库实例对象
services.AddSingleton<ISqlSugarClient>(db);
}
}
}
然后到Startup.cs中的ConfigureServices调用一下即可
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
//调用一下,即可完成初始化工作
SqlSugarSetup.Init(services);
}
好了,整体工作完成,现在只要运行项目即可自动创建数据库和表
F5运行
由于没有写任何页面,所以可以用数据库管理工具,连接指定数据库,然后查看数据库表生成情况
为了项目完整性,这里写一个控制器,简单添加点数据,然后查询一下
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using SqlSugar;
namespace SugarTest.Controllers
{
/// <summary>
/// 学生 控制器
/// </summary>
[ApiController]
[Route("api/[controller]/[action]")]//路由配置,方便调用
public class StudentController : ControllerBase
{
public readonly ISqlSugarClient db;
//这里采用构造注入的方式,将数据库实例对象注入进来,方便在各个方法中使用
public StudentController(ISqlSugarClient _db)
{
db = _db;
}
/// <summary>
/// 查询
/// </summary>
/// <returns></returns>
[HttpGet]
public List<Students> GetInfo()
{
return db.Queryable<Students>().ToList();
}
/// <summary>
/// 批量插入
/// </summary>
/// <returns></returns>
[HttpPut]
public List<Students> Add()
{
var list = new List<Students>()
{
new Students{Name="Jack",Age=25,Happy="Coding"},
new Students{Name="Bob",Age=25,Happy="PlayBall"},
new Students{Name="Mark",Age=25,Happy="Sleep"}
};
db.Insertable(list).ExecuteCommand();//这里返回的是受影响的行数,插入成功 累加1
return GetInfo();//直接调用查询方法
}
}
}
运行项目,调用 api
执行过程 生成的sql