发布:2023/3/19 13:23:51作者:管理员 来源:本站 浏览次数:1096
之前在做坦克游戏的服务端的时候就打算引入SqlSugar,但是由于时间的关系没有实现。为什么要使用sqlsugar这样一个ORM框架?因为使用ORM框架可以提高开发效率,降低开发成本 、使开发更加对象化 、方便移植 等优点。在此之前还尝试过使用EntityFramework,可能是因为自己对这块不熟悉花了半天时间才连接成功,感觉EF还是搭配sqlserver更合适。
一、SQLSugar功能介绍
1. 相比EF Core,多库支持更好 ,在国内拥有不逊色EF Core 的开源生态;
2. 支持 .NET 百万级【大数据】写入和更新、分表和几十亿查询和统计等 拥有成熟方案;
3. 支持 完整的SAAS一套应用 跨库查询 、租户分库 、租户分表 和 租户数据隔离;
4. 支持【低代码】+工作流 (无实体多库兼容CRUD & JSON TO SQL );
5. 语法最爽的ORM、优美的表达式、仓储、UnitOfWork、DbContext、AOP ;
6. 支持 DbFirst、CodeFirst和【WebFirst】 3种模式开发;
7. 简单易用、功能齐全、高性能、轻量级、服务齐全、官网教程文档、有专业技术支持一天18小时服务。
官方网站:https://www.donet5.com/Home/Doc
二、 .NetFramework中使用sqlsugar
1.新建解决方案,自定义解决方案名称和保存路径。
2.在项目中添加相关程序包(mysql.data和sqlsugar),安装mysql.data的时候会自动安装依赖包google.protobuf。
3.封装一个数据库操作类。
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
namespace SugarMysql
{
public class DBContext<T> where T : class, new()
{
public SqlSugarClient Db;
private static DBContext<T> mSingle = null;
public static DBContext<T> GetInstance()
{
if (mSingle == null)
mSingle = new DBContext<T>();
return mSingle;
}
protected DBContext()
{ //通过这个可以直接连接数据库
Db = new SqlSugarClient(new ConnectionConfig()
{
//可以在连接字符串中设置连接池pooling=true;表示开启连接池
//eg:min pool size=2;max poll size=4;表示最小连接池为2,最大连接池是4;默认是100
ConnectionString = "database='" + "sugarMysql" + "';Data Source = '" + "172.30.146.184" + "'; User Id = '" + "root" + "'; pwd='" + "123456" + "';charset='utf8mb4';pooling=true",
DbType = SqlSugar.DbType.MySql,//我这里使用的是Mysql数据库
IsAutoCloseConnection = true,//自动关闭连接
InitKeyType = InitKeyType.Attribute
});
}
public void Dispose()
{
if (Db != null)
{
Db.Dispose();
}
}
public SimpleClient<T> CurrentDb { get { return new SimpleClient<T>(Db); } }
/// <summary>
/// 获取所有
/// </summary>
/// <returns></returns>
public virtual List<T> GetList()
{
return CurrentDb.GetList();
}
/// <summary>
/// 根据表达式查询
/// </summary>
/// <returns></returns>
public virtual List<T> GetList(Expression<Func<T, bool>> whereExpression)
{
return CurrentDb.GetList(whereExpression);
}
/// <summary>
/// 根据主键查询
/// </summary>
/// <returns></returns>
public virtual List<T> GetById(dynamic id)
{
return CurrentDb.GetById(id);
}
/// <summary>
/// 根据主键删除
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public virtual bool Delete(dynamic id)
{
if (string.IsNullOrEmpty(id.ObjToString))
{
Console.WriteLine(string.Format("要删除的主键id不能为空值!"));
}
return CurrentDb.Delete(id);
}
/// <summary>
/// 根据实体删除
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public virtual bool Delete(T data)
{
if (data == null)
{
Console.WriteLine(string.Format("要删除的实体对象不能为空值!"));
}
return CurrentDb.Delete(data);
}
/// <summary>
/// 根据主键批量删除
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public virtual bool Delete(dynamic[] ids)
{
if (ids.Count() <= 0)
{
Console.WriteLine(string.Format("要删除的主键ids不能为空值!"));
}
return CurrentDb.AsDeleteable().In(ids).ExecuteCommand() > 0;
}
/// <summary>
/// 根据表达式删除
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public virtual bool Delete(Expression<Func<T, bool>> whereExpression)
{
return CurrentDb.Delete(whereExpression);
}
/// <summary>
/// 根据实体更新,实体需要有主键
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public virtual bool Update(T obj)
{
if (obj == null)
{
Console.WriteLine(string.Format("要更新的实体不能为空,必须带上主键!"));
}
return CurrentDb.Update(obj);
}
/// <summary>
///批量更新
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public virtual bool Update(List<T> objs)
{
if (objs.Count <= 0)
{
Console.WriteLine(string.Format("要批量更新的实体不能为空,必须带上主键!"));
}
return CurrentDb.UpdateRange(objs);
}
/// <summary>
/// 插入
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public virtual bool Insert(T obj)
{
return CurrentDb.Insert(obj);
}
/// <summary>
/// 批量
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public virtual bool Insert(List<T> objs)
{
return CurrentDb.InsertRange(objs);
}
//可以扩展更多方法
}
}
4.定义数据model类。
[SugarTable("Books")]//指定数据库中的表名,要对应数据库的表名,否则会出错
public class Books
{
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]//指定主键和自动增长
public int Id { get; set; }
public int BId { get; set; }
public string BName { get; set; }
public int TypeId { get; set; }
}
5.操作数据库。
static void Main(string[] args)
{
//下面代码只是演示CRUD,数据库里没有数据的情况下下面代码会报错
Books b = new Books() { BId = 2, BName = "MySQL", TypeId = 5 };
//添加数据
DBContext<Books>.GetInstance().CurrentDb.Insert(b);
//删除数据
DBContext<Books>.GetInstance().CurrentDb.Delete(b);
//更新数据
DBContext<Books>.GetInstance().CurrentDb.Update(b);
//插找数据
DBContext<Books>.GetInstance().CurrentDb.GetById(0);
}
© Copyright 2014 - 2024 柏港建站平台 ejk5.com. 渝ICP备16000791号-4