C# ORM模式之 SqlSugar使用

本文介绍了C#中的ORM框架SqlSugar,详细阐述了其特点,包括高性能、高扩展性、稳定性以及全面的功能,并提及SqlSugar支持多种数据库。接着,文章展示了在项目中的实际使用,包括包的引用、接口封装以及事务处理等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、SqlSugar介绍及分析

SqlSugar是一款 老牌 .NET 开源ORM框架,连接DB特别方便

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

官方文档:http://www.donet5.com/Home/Doc

SqlSugar的优点:

1、高性能:不夸张的说,去掉Sql在数据库执行的时间,SqlSugar是EF数倍性能,另外在批量操作和一对多查询上也有不错的SQL优化;

2、高扩展性 :支持自定义拉姆达函数解析、扩展数据类型、支持自定义实体特性,外部缓存等;

3、稳定性和技术支持:  虽然不是官方ORM, 但在稳定性上也是有着数年用户积累,如果遇到问题可以在GITHUB提出来,会根据紧急度定期解决;

4、功能全面:虽然SqlSugar小巧可功能并不逊色于EF框架

5、创新、持续更新 ,向下兼容

二、SqlSugar项目中的使用

1、包的引用:

 2、全局引用:

3、接口中常用方法封装

1)、ISqlSugarRepository接口封装

public interface ISqlSugarRepository<TEntity> : IBaseRepository where TEntity : class
{
    /// <summary>
    /// 
    /// </summary>
    ISqlSugarClient Db { get; }

    /// <summary>
    /// 执行查询SQL语句
    /// 只支持查询操作,并且支持拉姆达分页
    /// </summary>
    /// <param name="sql"></param>
    /// <returns></returns>
    Task<List<TEntity>> ExecuteSql(string sql);

    /// <summary>
    /// 通过Ado方法执行SQL语句
    /// 支持任何SQL语句
    /// </summary>
    /// <param name="sql"></param>
    /// <param name="whereObj"></param>
    /// <returns></returns>
    Task<List<TEntity>> ExecuteAllSql(string sql, object whereObj = null);

    /// <summary>
    /// 插入实体
    /// </summary>
    /// <param name="model"></param>
    /// <returns></returns>
    Task<int> Add(TEntity model);

    /// <summary>
    /// 批量插入实体
    /// </summary>
    /// <param name="listEntity"></param>
    /// <returns></returns>
    Task<int> Add(List<TEntity> listEntity);

    /// <summary>
    /// 根据实体删除数据
    /// </summary>
    /// <param name="model"></param>
    /// <returns></returns>
    Task<bool> Delete(TEntity model);

    /// <summary>
    /// 根据实体集合批量删除数据
    /// </summary>
    /// <param name="models"></param>
    /// <returns></returns>
    Task<bool> Delete(List<TEntity> models);

    /// <summary>
    /// 根据ID删除数据
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    Task<bool> DeleteById(object id);

    /// <summary>
    /// 根据IDs批量删除数据
    /// </summary>
    /// <param name="ids"></param>
    /// <returns></returns>
    Task<bool> DeleteByIds(List<object> ids);

    /// <summary>
    /// 更新实体
    /// </summary>
    /// <param name="model"></param>
    /// <returns></returns>
    Task<bool> Update(TEntity model);

    /// <summary>
    /// 批量更新实体
    /// </summary>
    /// <param name="listEntity"></param>
    /// <returns></returns>
    Task<int> Update(List<TEntity> listEntity);

    /// <summary>
    /// 根据ID查询一条数据
    /// </summary>
    /// <param name="objId"></param>
    /// <returns></returns>
    Task<TEntity> GetById(object objId);

    /// <summary>
    /// 根据条件查询数据是否存
SqlSugar 是一个轻量级的ORM框架,可以方便地操作多种数据库。下面是一个简单的示例,演示如何使用SqlSugar实现多数据库仓储模式。 首先,我们需要定义一个基本的仓储接口,用于定义一些通用的CRUD操作: ```csharp public interface IRepository<T> where T : class, new() { List<T> Query(Expression<Func<T, bool>> whereExpression); T QuerySingle(Expression<Func<T, bool>> whereExpression); void Add(T entity); void Add(List<T> entities); void Update(T entity); void Delete(T entity); void Delete(Expression<Func<T, bool>> whereExpression); } ``` 然后,我们可以为每种数据库定义一个具体的仓储实现类,实现上述接口中的方法。例如,对于MySQL数据库,可以定义如下的仓储实现类: ```csharp public class MySqlRepository<T> : IRepository<T> where T : class, new() { private readonly SqlSugarClient _db; public MySqlRepository(string connectionString) { _db = new SqlSugarClient(new ConnectionConfig { ConnectionString = connectionString, DbType = DbType.MySql, IsAutoCloseConnection = true, InitKeyType = InitKeyType.Attribute }); } public List<T> Query(Expression<Func<T, bool>> whereExpression) { return _db.Queryable<T>().Where(whereExpression).ToList(); } public T QuerySingle(Expression<Func<T, bool>> whereExpression) { return _db.Queryable<T>().Single(whereExpression); } public void Add(T entity) { _db.Insertable(entity).ExecuteCommand(); } public void Add(List<T> entities) { _db.Insertable(entities).ExecuteCommand(); } public void Update(T entity) { _db.Updateable(entity).ExecuteCommand(); } public void Delete(T entity) { _db.Deleteable(entity).ExecuteCommand(); } public void Delete(Expression<Func<T, bool>> whereExpression) { _db.Deleteable<T>().Where(whereExpression).ExecuteCommand(); } } ``` 类似地,我们还可以定义其他数据库的仓储实现类,例如SQL Server、Oracle等。 最后,我们可以定义一个工厂类,根据需要返回相应的仓储实现类。例如,对于MySQL数据库,可以定义如下的工厂类: ```csharp public class MySqlRepositoryFactory<T> where T : class, new() { private readonly string _connectionString; public MySqlRepositoryFactory(string connectionString) { _connectionString = connectionString; } public IRepository<T> GetRepository() { return new MySqlRepository<T>(_connectionString); } } ``` 这样,我们就可以根据需要使用不同的数据库,而无需修改业务代码。例如,对于MySQL数据库,可以使用如下的代码: ```csharp var factory = new MySqlRepositoryFactory<User>("connectionString"); var repository = factory.GetRepository(); var users = repository.Query(u => u.Name == "张三"); ``` 对于其他数据库也可以使用类似的方式操作。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值