当前位置: 首页 > wzjs >正文

网站后台密码忘了香飘飘奶茶软文

网站后台密码忘了,香飘飘奶茶软文,开发手机应用网站,网站建设人员工资目录 1.添加包 2.配置连接字符串 3.配置SqlSugar 3.1.添加基础类 3.2.添加方法 3.2.1.读取配置方法 3.2.2.枚举扩展方法 3.3.添加管理类(重要) 4.配置仓储 4.1.仓储接口添加 5.注册 6.使用 该文档是配置SqlSugar多租户和加仓储教程。使用 S…

       

目录

1.添加包

2.配置连接字符串

 3.配置SqlSugar

        3.1.添加基础类

         3.2.添加方法

        3.2.1.读取配置方法

        3.2.2.枚举扩展方法       

         3.3.添加管理类(重要)

4.配置仓储

        4.1.仓储接口添加

5.注册

6.使用 


        该文档是配置SqlSugar多租户和加仓储教程。使用 SqlSugar 添加仓储层可以带来多方面的优势,尤其在提高代码的可维护性、可测试性和开发效率方面,提升代码的整体质量,促进团队合作,并降低维护成本。这对于长期发展的项目来说尤为重要。

1.添加包

        添加 SqlSugarCore 的NuGet包。

        操作:点击打开到要添加的项目 → 依赖项 → 包 → 右键点击 管理NuGet包

→ 搜索 SqlSugarCore → 安装

2.配置连接字符串

        点击到添加的项目 → 右键添加 → 新建项 → 右上角搜索 json → 修改名字为 dbsettings →添加

        添加自己的数据库连接

{//数据库连接字符串"ConnectionStrings": {"DefaultDbString": "Server=你的数据库地址;Port=数据库端口;Database=数据库名称;User ID=用户;Password=密码;SslMode=Required;","DefaultDbNumber": 0,"DefaultDbType": "MySql","DbConfigs": [{"DbNumber": "1","DbType": "SqlServer","DbString": "Server=你的数据库地址;Initial Catalog=数据库名称;User ID=用户;Password=密码;Encrypt=True;TrustServerCertificate=True;"},{"DbNumber": 2,"DbType": "MySql","DbString": "Server=你的数据库地址;Port=数据库端口;Database=数据库名称;User ID=用户;Password=密码;SslMode=Required;"}]}
}

        案例如下

 3.配置SqlSugar

        3.1.添加基础类

        添加 DbConnEnum 枚举、ConnectionStringsOptions 类、DbConfig 类

 public enum DbConnEnum{/// <summary>/// SqlServer/// </summary>[Description("Mysql")]Default = 0,/// <summary>/// Mysql/// </summary>[Description("Sqlserver")]SystemSqlserver = 1,/// <summary>/// Mysql/// </summary>[Description("Mysql")]SystemMysql = 2,}/// <summary>/// 数据库配置/// </summary>public class ConnectionStringsOptions{/// <summary>/// 默认数据库编号/// </summary>public int DefaultDbNumber { get; set; }/// <summary>/// 默认数据库类型/// </summary>public string DefaultDbType { get; set; }/// <summary>/// 默认数据库连接字符串/// </summary>public string DefaultDbString { get; set; }/// <summary>/// 业务库集合/// </summary>public List<DbConfig> DbConfigs { get; set; }}/// <summary>/// 数据库参数/// </summary>public class DbConfig{/// <summary>/// 数据库编号/// </summary>public string DbNumber { get; set; }/// <summary>/// 数据库类型/// </summary>public string DbType { get; set; }/// <summary>/// 数据库连接字符串/// </summary>public string DbString { get; set; }}

        案例如下

 

         3.2.添加方法

        3.2.1.读取配置方法

        添加获取配置方法

/// <summary>/// 全局配置/// </summary>public static class Config{/// <summary>/// 从指定的 JSON 配置文件中读取配置,并反序列化为指定类型/// </summary>/// <typeparam name="T">目标配置类型(如 RedisSettings、DatabaseSettings 等)</typeparam>/// <param name="fileName">JSON 配置文件名(如 "appsettings.json")</param>/// <param name="sessions">配置节点名称(如 "RedisSettings")</param>/// <returns>返回绑定后的强类型配置对象</returns>public static T GetSetting<T>(string fileName, string sessions){//创建 ConfigurationBuilder 实例,用于构建配置var builder = new ConfigurationBuilder()//设置配置文件的基础路径为当前程序运行目录.SetBasePath(Directory.GetCurrentDirectory())//添加 JSON 文件作为配置源://- fileName: 指定要加载的 JSON 文件//- optional: false 表示文件必须存在,否则抛出异常//- reloadOnChange: true 表示文件修改时自动重新加载.AddJsonFile(fileName, optional: false, reloadOnChange: true);//构建配置对象(IConfigurationRoot)IConfigurationRoot config = builder.Build();//获取指定配置节点(sessions),并将其反序列化为类型 Tvar conn = config.GetSection(sessions).Get<T>();//返回反序列化后的配置对象return conn;}}

        案例如下

        3.2.2.枚举扩展方法       

        添加枚举扩展方法方便扩展枚举

 /// <summary>/// 枚举扩展/// </summary>public static class EnumExtesion{/// <summary>/// 枚举扩展方法 - 获取枚举值的Description特性描述/// </summary>/// <param name="value">枚举值</param>/// <returns>描述内容</returns>public static string Description(this Enum value){// 参数验证if (value == null)throw new ArgumentNullException(nameof(value));// 获取枚举类型的字段信息FieldInfo fi = value.GetType().GetField(value.ToString());// 获取字段上的DescriptionAttribute特性数组DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), // 要查找的特性类型false                        // 不搜索继承链);// 如果有Description特性则返回其描述,否则返回枚举字符串return attributes.Length > 0 ? attributes[0].Description : value.ToString();}}

        案例如下

         3.3.添加管理类(重要)

                SqlSugar数据库上下文管理类,用于管理多数据库连接实例

using Frame4_LibraryCore.BaseConfig;
using Frame6_LibraryUtility.Enum;
using Microsoft.Extensions.Configuration;
using SqlSugar;
using DbType = SqlSugar.DbType;namespace Frame3_DataRepository.SqlSugarRepository
{/// <summary>/// SqlSugar数据库上下文管理类,用于管理多数据库连接实例/// </summary>public class DatabaseSqlSugar{/// <summary>/// 数据库连接字典,按数据库编号存储SqlSugarScope实例/// Key: 数据库编号(int)/// Value: SqlSugarScope实例/// </summary>private readonly Dictionary<int, SqlSugarScope> _dbs = new();/// <summary>/// 主数据库实例(默认操作使用的数据库)/// </summary>public ISqlSugarClient MainDb { get; private set; }/// <summary>/// 构造函数,初始化数据库连接/// </summary>/// <param name="configuration">配置接口,用于获取连接字符串</param>public DatabaseSqlSugar(IConfiguration configuration){// 从配置文件获取数据库连接配置var connectionStringOption = Config.GetSetting<ConnectionStringsOptions>("dbsettings.json", "ConnectionStrings");// 添加默认数据库连接AddDatabase(connectionStringOption.DefaultDbNumber, connectionStringOption.DefaultDbType, connectionStringOption.DefaultDbString);// 添加其他配置的数据库连接if (connectionStringOption.DbConfigs != null){foreach (var config in connectionStringOption.DbConfigs){AddDatabase(int.Parse(config.DbNumber), config.DbType, config.DbString);}}// 设置主数据库实例MainDb = _dbs[connectionStringOption.DefaultDbNumber];}/// <summary>/// 添加数据库连接/// </summary>/// <param name="dbNumber">数据库编号</param>/// <param name="dbType">数据库类型字符串</param>/// <param name="connectionString">连接字符串</param>private void AddDatabase(int dbNumber, string dbType, string connectionString){// 创建SqlSugarScope实例var db = new SqlSugarScope(new ConnectionConfig(){ConnectionString = connectionString,DbType = (DbType)Enum.Parse(typeof(DbType), dbType), // 转换数据库类型枚举IsAutoCloseConnection = true, // 启用自动关闭连接InitKeyType = InitKeyType.Attribute // 使用特性方式初始化主键});// 绑定AOP事件BindAopEvents(db, dbNumber);// 添加到数据库字典_dbs[dbNumber] = db;}/// <summary>/// 根据实体类型获取对应的数据库实例/// </summary>/// <typeparam name="TEntity">实体类型</typeparam>/// <returns>对应的SqlSugarClient实例</returns>/// <exception cref="KeyNotFoundException">当找不到对应的数据库时抛出</exception>public ISqlSugarClient GetDbByEntity<TEntity>(){var type = typeof(TEntity);// 获取实体上的Tenant特性(用于多租户/分库)var tenantAttr = (TenantAttribute)Attribute.GetCustomAttribute(type, typeof(TenantAttribute));// 获取数据库编号,默认为0int dbNumber = (int)tenantAttr.configId != 0 ? (int)tenantAttr.configId : 0;if (_dbs.TryGetValue(dbNumber, out var db)){// 确保AOP事件已绑定BindAopEvents(db, dbNumber);return db;}throw new KeyNotFoundException($"找不到编号为 {dbNumber} 的数据库连接");}/// <summary>/// 绑定AOP事件(主要用于SQL日志记录)/// </summary>/// <param name="db">SqlSugarClient实例</param>/// <param name="dbNumber">数据库编号</param>private void BindAopEvents(ISqlSugarClient db, int dbNumber){// SQL执行完成事件db.Aop.OnLogExecuted = (sql, pars) =>{// 根据SQL类型设置不同颜色if (sql.TrimStart().StartsWith("SELECT", StringComparison.OrdinalIgnoreCase)){Console.ForegroundColor = ConsoleColor.Green; // 查询语句用绿色}else if (sql.TrimStart().StartsWith("DELETE", StringComparison.OrdinalIgnoreCase)){Console.ForegroundColor = ConsoleColor.Red; // 删除语句用红色}else{Console.ForegroundColor = ConsoleColor.Blue; // 其他语句用蓝色}// 构建完整SQL(替换参数)string completeSql = sql;if (pars != null && pars.Length > 0){Dictionary<string, object> parameterValues = new();foreach (var p in pars){parameterValues[p.ParameterName] = p.Value;}foreach (var kvp in parameterValues){completeSql = completeSql.Replace(kvp.Key, FormatParameterValue(kvp.Value));}}// 输出SQL日志Console.WriteLine($"【Sql时间】:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}\r\n" +$"【Sql库号】:{((DbConnEnum)dbNumber).Description()} \r\n" +$"【Sql语句】:{completeSql} \r\n" +$"【Sql耗时】: {db.Ado.SqlExecutionTime.TotalMilliseconds:F2} 毫秒\r\n");};}/// <summary>/// 关闭所有数据库连接/// </summary>public void CloseAllConnections(){foreach (var db in _dbs.Values){db.Dispose(); // 释放数据库连接资源}}/// <summary>/// 格式化参数值,用于SQL日志输出/// </summary>/// <param name="value">参数值</param>/// <returns>格式化后的字符串</returns>private static string FormatParameterValue(object value){if (value is string stringValue){return $"'{stringValue}'"; // 字符串类型加引号}else if (value is DateTime dateTimeValue){return $"'{dateTimeValue.ToString("yyyy-MM-dd HH:mm:ss")}'"; // 日期时间格式化}else if (value is bool boolValue){return boolValue ? "1" : "0"; // 布尔值转数字}else{return value?.ToString() ?? "NULL"; // 其他类型直接转字符串,null值转为NULL}}}
}

         案例如下

4.配置仓储

        基于SqlSugar的通用仓储实现类,提供对实体TEntity的CRUD操作及基础查询功能

using SqlSugar;
using System.Linq.Expressions;namespace Frame3_DataRepository.SqlSugarRepository
{/// <summary>/// 基于SqlSugar的通用仓储实现类/// 提供对实体TEntity的CRUD操作及基础查询功能/// </summary>/// <typeparam name="TEntity">实体类型,必须是引用类型且有公共无参构造函数</typeparam>public class SqlSugarRepository<TEntity> : ISqlSugarRepository<TEntity> where TEntity : class, new(){/// <summary>/// 数据库工厂实例,用于获取数据库连接/// </summary>private readonly DatabaseSqlSugar _dbFactory;/// <summary>/// 构造函数,通过依赖注入初始化数据库工厂/// </summary>/// <param name="dbFactory">数据库工厂实例</param>public SqlSugarRepository(DatabaseSqlSugar dbFactory){_dbFactory = dbFactory;}/// <summary>/// 当前实体对应的数据库客户端/// 根据实体上的TenantAttribute自动选择对应的数据库/// </summary>protected ISqlSugarClient _db => _dbFactory.GetDbByEntity<TEntity>();/// <summary>/// 实体查询集合(延迟加载)/// 可用于构建复杂查询/// </summary>public virtual ISugarQueryable<TEntity> Entities => _db.Queryable<TEntity>();#region 查询方法/// <summary>/// 根据条件表达式获取第一条记录/// </summary>/// <param name="whereExpression">查询条件表达式</param>/// <returns>符合条件的第一条记录,若无则返回null</returns>public TEntity First(Expression<Func<TEntity, bool>> whereExpression){return _db.Queryable<TEntity>().First(whereExpression);}/// <summary>/// 异步获取符合条件的第一条记录/// </summary>/// <param name="whereExpression">查询条件表达式</param>/// <returns>包含查询结果的Task</returns>public async Task<TEntity> FirstAsync(Expression<Func<TEntity, bool>> whereExpression){return await _db.Queryable<TEntity>().FirstAsync(whereExpression);}/// <summary>/// 获取所有记录列表/// </summary>/// <returns>实体列表</returns>public List<TEntity> ToList(){return _db.Queryable<TEntity>().ToList();}/// <summary>/// 异步获取所有记录列表/// </summary>/// <returns>包含实体列表的Task</returns>public async Task<List<TEntity>> ToListAsync(){return await _db.Queryable<TEntity>().ToListAsync();}/// <summary>/// 根据主键ID获取实体/// 默认查找名为"Id"的属性作为主键/// </summary>/// <param name="id">主键值</param>/// <returns>对应实体</returns>/// <exception cref="InvalidOperationException">当实体没有Id属性时抛出</exception>public TEntity GetById(object id){var keyProperty = typeof(TEntity).GetProperty("Id");if (keyProperty == null)throw new InvalidOperationException($"实体{typeof(TEntity).Name}不包含Id属性");return _db.Queryable<TEntity>().First(it => keyProperty.GetValue(it).Equals(id));}/// <summary>/// 异步根据主键ID获取实体/// </summary>/// <param name="id">主键值</param>/// <returns>包含查询结果的Task</returns>public async Task<TEntity> GetByIdAsync(object id){var keyProperty = typeof(TEntity).GetProperty("Id");if (keyProperty == null)throw new InvalidOperationException($"实体{typeof(TEntity).Name}不包含Id属性");return await _db.Queryable<TEntity>().FirstAsync(it => keyProperty.GetValue(it).Equals(id));}#endregion#region 新增方法/// <summary>/// 插入单个实体/// </summary>/// <param name="entity">要插入的实体</param>/// <returns>影响的行数</returns>public int Insert(TEntity entity){return _db.Insertable(entity).ExecuteCommand();}/// <summary>/// 批量插入实体集合/// </summary>/// <param name="entity">实体集合</param>/// <returns>影响的行数</returns>public int Insert(List<TEntity> entity){return _db.Insertable(entity).ExecuteCommand();}/// <summary>/// 异步插入单个实体/// </summary>/// <param name="entity">要插入的实体</param>/// <returns>包含影响行数的Task</returns>public async Task<int> InsertAsync(TEntity entity){return await _db.Insertable(entity).ExecuteCommandAsync();}/// <summary>/// 异步批量插入实体集合/// </summary>/// <param name="entity">实体集合</param>/// <returns>包含影响行数的Task</returns>public async Task<int> InsertAsync(List<TEntity> entity){return await _db.Insertable(entity).ExecuteCommandAsync();}#endregion#region 更新方法/// <summary>/// 更新单个实体/// 自动忽略null值和默认值字段/// </summary>/// <param name="entity">要更新的实体</param>/// <returns>影响的行数</returns>public int Update(TEntity entity){return _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true, ignoreAllDefaultValue: true).ExecuteCommand();}/// <summary>/// 批量更新实体集合/// </summary>/// <param name="entity">实体集合</param>/// <returns>影响的行数</returns>public int Update(List<TEntity> entity){return _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true, ignoreAllDefaultValue: true).ExecuteCommand();}/// <summary>/// 异步更新单个实体/// </summary>/// <param name="entity">要更新的实体</param>/// <returns>包含影响行数的Task</returns>public async Task<int> UpdateAsync(TEntity entity){return await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true, ignoreAllDefaultValue: true).ExecuteCommandAsync();}/// <summary>/// 异步批量更新实体集合/// </summary>/// <param name="entity">实体集合</param>/// <returns>包含影响行数的Task</returns>public async Task<int> UpdateAsync(List<TEntity> entity){return await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true, ignoreAllDefaultValue: true).ExecuteCommandAsync();}/// <summary>/// 高性能批量更新/// </summary>/// <param name="entity">实体集合</param>/// <returns>影响的行数</returns>/// <exception cref="ArgumentException">当实体集合为空时抛出</exception>public int BulkUpdate(List<TEntity> entity){if (entity == null || !entity.Any())throw new ArgumentException("更新实体集合不能为空");return _db.Fastest<TEntity>().BulkUpdate(entity);}/// <summary>/// 异步高性能批量更新/// </summary>/// <param name="entity">实体集合</param>/// <returns>包含影响行数的Task</returns>public async Task<int> BulkUpdateAsync(List<TEntity> entity){if (entity == null || !entity.Any())throw new ArgumentException("更新实体集合不能为空");return await _db.Fastest<TEntity>().BulkUpdateAsync(entity);}#endregion#region 删除方法/// <summary>/// 根据主键ID删除记录/// </summary>/// <param name="id">主键值</param>/// <returns>影响的行数</returns>/// <exception cref="InvalidOperationException">当实体没有Id属性时抛出</exception>public int DeleteById(object id){var keyProperty = typeof(TEntity).GetProperty("Id");if (keyProperty == null)throw new InvalidOperationException($"实体{typeof(TEntity).Name}不包含Id属性");var expression = Expression.Lambda<Func<TEntity, bool>>(Expression.Equal(Expression.Property(Expression.Parameter(typeof(TEntity), "it"), "Id"),Expression.Constant(id)),new[] { Expression.Parameter(typeof(TEntity), "it") });return _db.Deleteable<TEntity>().Where(expression).ExecuteCommand();}/// <summary>/// 异步根据主键ID删除记录/// </summary>/// <param name="id">主键值</param>/// <returns>包含影响行数的Task</returns>public async Task<int> DeleteByIdAsync(object id){var keyProperty = typeof(TEntity).GetProperty("Id");if (keyProperty == null)throw new InvalidOperationException($"实体{typeof(TEntity).Name}不包含Id属性");var expression = Expression.Lambda<Func<TEntity, bool>>(Expression.Equal(Expression.Property(Expression.Parameter(typeof(TEntity), "it"), "Id"),Expression.Constant(id)),new[] { Expression.Parameter(typeof(TEntity), "it") });return await _db.Deleteable<TEntity>().Where(expression).ExecuteCommandAsync();}#endregion#region 查询构造器/// <summary>/// 根据条件表达式构建查询/// </summary>/// <param name="predicate">查询条件</param>/// <returns>可继续构建的查询对象</returns>public virtual ISugarQueryable<TEntity> Where(Expression<Func<TEntity, bool>> predicate){return AsQueryable(predicate);}/// <summary>/// 根据条件构建查询/// 当condition为true时应用predicate条件/// </summary>/// <param name="condition">是否应用条件</param>/// <param name="predicate">查询条件</param>/// <returns>可继续构建的查询对象</returns>public virtual ISugarQueryable<TEntity> Where(bool condition, Expression<Func<TEntity, bool>> predicate){return AsQueryable().WhereIF(condition, predicate);}/// <summary>/// 获取基础查询构造器/// </summary>/// <returns>可继续构建的查询对象</returns>public virtual ISugarQueryable<TEntity> AsQueryable(){return Entities;}/// <summary>/// 根据条件获取查询构造器/// </summary>/// <param name="predicate">查询条件</param>/// <returns>可继续构建的查询对象</returns>public virtual ISugarQueryable<TEntity> AsQueryable(Expression<Func<TEntity, bool>> predicate){return Entities.Where(predicate);}#endregion#region 事务管理/// <summary>/// 在当前数据库开启事务/// </summary>public void CurrentBeginTran(){_db.AsTenant().BeginTran();}/// <summary>/// 提交当前数据库事务/// </summary>public void CurrentCommitTran(){_db.AsTenant().CommitTran();}/// <summary>/// 回滚当前数据库事务/// </summary>public void CurrentRollbackTran(){_db.AsTenant().RollbackTran();}#endregion}
}

        案例如下

        4.1.仓储接口添加

        为了更好的使用仓储,把仓储的每个方法添加接口。

using SqlSugar;
using System.Linq.Expressions;namespace Frame3_DataRepository.SqlSugarRepository
{/// <summary>/// 仓储接口/// </summary>/// <typeparam name="TEntity"></typeparam>public interface ISqlSugarRepository<TEntity> where TEntity : class, new(){/// <summary>/// 查询单条数据/// </summary>/// <param name="whereExpression"></param>/// <returns></returns>TEntity First(Expression<Func<TEntity, bool>> whereExpression);/// <summary>/// 查询单条数据 (异步)/// </summary>/// <param name="whereExpression"></param>/// <returns></returns>Task<TEntity> FirstAsync(Expression<Func<TEntity, bool>> whereExpression);/// <summary>/// 获取列表/// </summary>/// <returns></returns>List<TEntity> ToList();/// <summary>/// 获取列表 (异步)/// </summary>/// <returns></returns>Task<List<TEntity>> ToListAsync();/// <summary>/// 根据Id获取数据/// </summary>/// <param name="id"></param>/// <returns></returns>/// <exception cref="InvalidOperationException"></exception>TEntity GetById(object id);/// <summary>/// 根据Id获取数据 (异步)/// </summary>/// <param name="id"></param>/// <returns></returns>/// <exception cref="InvalidOperationException"></exception>Task<TEntity> GetByIdAsync(object id);/// <summary>/// 添加数据/// </summary>/// <param name="entity"></param>/// <returns></returns>int Insert(TEntity entity);/// <summary>/// 批量添加新增数据/// </summary>/// <param name="entity"></param>/// <returns></returns>int Insert(List<TEntity> entity);/// <summary>/// 添加数据 (异步)/// </summary>/// <param name="entity"></param>/// <returns></returns>Task<int> InsertAsync(TEntity entity);/// <summary>/// 批量添加数据 (异步)/// </summary>/// <param name="entity"></param>/// <returns></returns>Task<int> InsertAsync(List<TEntity> entity);/// <summary>/// 修改数据/// </summary>/// <param name="entity"></param>/// <returns></returns>int Update(TEntity entity);/// <summary>/// 批量修改数据/// </summary>/// <param name="entity"></param>/// <returns></returns>int Update(List<TEntity> entity);/// <summary>/// 修改数据 (异步)/// </summary>/// <param name="entity"></param>/// <returns></returns>Task<int> UpdateAsync(TEntity entity);/// <summary>/// 批量修改数据 (异步)/// </summary>/// <param name="entity"></param>/// <returns></returns>Task<int> UpdateAsync(List<TEntity> entity);/// <summary>/// 大批量修改/// </summary>/// <param name="entity"></param>/// <returns></returns>/// <exception cref="ArgumentException"></exception>int BulkUpdate(List<TEntity> entity);/// <summary>/// 大批量修改 (异步)/// </summary>/// <param name="entity"></param>/// <returns></returns>/// <exception cref="ArgumentException"></exception>Task<int> BulkUpdateAsync(List<TEntity> entity);/// <summary>/// 根据Id删除数据/// </summary>/// <param name="id"></param>/// <returns></returns>/// <exception cref="InvalidOperationException"></exception>int DeleteById(object id);/// <summary>/// 根据Id删除数据 (异步)/// </summary>/// <param name="id"></param>/// <returns></returns>/// <exception cref="InvalidOperationException"></exception>Task<int> DeleteByIdAsync(object id);/// <summary>/// 根据表达式查询多条记录/// </summary>/// <param name="predicate"></param>/// <returns></returns>ISugarQueryable<TEntity> Where(Expression<Func<TEntity, bool>> predicate);/// <summary>/// 根据表达式查询多条记录/// </summary>/// <param name="condition"></param>/// <param name="predicate"></param>/// <returns></returns>ISugarQueryable<TEntity> Where(bool condition, Expression<Func<TEntity, bool>> predicate);/// <summary>/// 构建查询分析器/// </summary>/// <returns></returns>ISugarQueryable<TEntity> AsQueryable();/// <summary>/// 构建查询分析器/// </summary>/// <param name="predicate"></param>/// <returns></returns>ISugarQueryable<TEntity> AsQueryable(Expression<Func<TEntity, bool>> predicate);}
}

        案例如下

5.注册

        添加好以上后就可以把SqlSugar和仓储在文件 Program 或 Startup 里注册。

 // 注册 DatabaseSqlSugar(单例或作用域都可以)builder.Services.AddSingleton<DatabaseSqlSugar>(sp =>{// 假设你有 IConfiguration 可用var configuration = sp.GetRequiredService<IConfiguration>();return new DatabaseSqlSugar(configuration);});// 注册Sqlsugar仓储builder.Services.AddScoped(typeof(ISqlSugarRepository<>), typeof(SqlSugarRepository<>));

6.使用 

        添加 entity 数据库实体类

using Frame6_LibraryUtility.Enum;
using SqlSugar;namespace Frame2_DataModel.Entity.User
{/// <summary>/// User实体/// </summary>[SugarTable("User", TableDescription = "用户表"), Tenant((int)DbConnEnum.SystemMysql)]public class UserEntity : BaseEntity{/// <summary>/// 用户Id主键/// </summary>[SugarColumn(IsPrimaryKey = true)]public string Id { get; set; }/// <summary>/// 用户登录名/// </summary>public string UserId { get; set; }/// <summary>/// 用户密码/// </summary>public string pwd { get; set; }/// <summary>/// 用户姓名/// </summary>public string UserName { get; set; }public string Age { get; set; }}
}

        案例如下

        使用仓储

 public class UserService : BaseService, IUserService{private readonly ISqlSugarRepository<UserEntity> _dbUser;/// <summary>/// 依赖注入/// </summary>/// <param name="sqlSugar"></param>/// <param name="tokenService"></param>/// <param name="iCurrentUser"></param>/// <param name="mapper"></param>public UserService(ISqlSugarRepository<UserEntity> dbUser){_dbUser = dbUser;}/// <summary>/// 获取所有test/// </summary>/// <returns></returns>public async Task<ResultModel<List<UserEntity>>> GetUserAsync(){var result = new ResultModel<List<UserEntity>>();var users = await _dbUser.ToListAsync();result.Msg = "获取成功";result.Data = users;return result;}}

         案例如下

http://www.dtcms.com/wzjs/136694.html

相关文章:

  • 武汉网站建设S小蝌蚪互联深圳网站优化平台
  • 软件供应商南京市网站seo整站优化
  • 北京哪家做网站优化百度投诉电话客服24小时
  • 政府网站 asp杭州seo平台
  • 网站建设广告网络营销做得比较好的企业
  • 初创公司网站设计苏州网图识别在线百度
  • 网站活动怎么做百度指数峰值查询
  • 小说网站建设源码推广公司有哪些公司
  • 贵阳市网站做的最好的疫情二十条优化措施
  • 慈溪做无痛同济&网站百度seo招聘
  • linux系统网站空间自助搭建平台
  • wordpress 外链插件郑州seo外包顾问
  • 兰州网站建设q.479185700棒谷歌优化怎么做
  • wordpress get author谈谈对seo的理解
  • 商城网站建设php网站维护工作内容
  • 南山网站建设多少钱新闻摘抄2022最新20篇
  • 怎么做网站的营销关键词如何确定
  • 做翻译 英文网站百度上怎么发布作品
  • 在郑州做网站网络营销推广方案策划书
  • 网站建设 保定社群营销怎么做
  • 青岛高端网站设计百度快速收录方法
  • 网站建设多少钱兴田德润放心新站快速收录
  • 网站平台建设招标书朋友圈广告怎么投放
  • 我国政府门户网站建设现状搜盘网
  • 华夏名网网站建设教程四川成都最新消息
  • 58招聘运营网站怎么做深圳网络推广公司哪家好
  • 如何查看网站的建设方式友情链接检测工具
  • 网站名称与主体性质不符网络运营怎么做
  • 百度合作推广网站排名优化怎样做
  • 做网站迅雷下载链接设置电商平台建设方案