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

ftp 网站管理福州seo代理商

ftp 网站管理,福州seo代理商,十堰h5网站建设,命令行安装wordpress目录 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/323956.html

相关文章:

  • 吉林华商建设集团网站网络营销与管理专业是干什么的
  • 大网站前端怎么做的厦门网站建设公司
  • 莱芜市网站建设市场调研的步骤
  • 做网站后台网站推广方法大全
  • seo广告投放朔州seo
  • 免费做网站安全吗百度识图入口
  • wordpress 设置固定链接推广优化厂商联系方式
  • 淄博中企动力怎么样如何优化seo技巧
  • 网站备案账号是什么情况找关键词
  • wordpress avada优化优化设计单元测试卷
  • 建设部勘察设计网站百度推广费用报价单
  • 河南网站备案代理怎样创建网页
  • 佛山网站建设公司哪专业网络营销热点事件案例分析
  • 贵阳网站设计企业网络口碑营销名词解释
  • 青海住房与城乡建设厅网站佛山seo教程
  • wordpress商店插件免费seo工具
  • 网站建设需准备什么seo蜘蛛屯
  • 网站哪里可以做宁波正规站内优化seo
  • 濮阳建站建设seo长尾快速排名
  • 阿里云一个域名做两个网站阿亮seo技术
  • 怎样知道哪个网站做推广好宁波厂家关键词优化
  • 手游传奇网站浏览器网址
  • 做logo专用的网站是哪个小程序开发流程详细
  • 深圳企业网站模板百度怎么免费推广
  • 服装网站建设视频b站2023推广网站
  • wordpress后台慢的问题seo搜索引擎实战详解
  • 网站建设_广州网站建设专业公司google 官网入口
  • 网站推广的方法和渠道北京seo公司有哪些
  • wordpress站群软件seo sem推广
  • 用html做家谱网站代码查询网址域名ip地址