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

第二章-环境配置与项目集成

第二章:环境配置与项目集成

目录

  1. 开发环境准备
  2. NuGet包安装与配置
  3. 连接字符串配置
  4. 依赖注入集成
  5. ASP.NET Core项目集成
  6. 配置文件管理
  7. 多环境配置
  8. 常见问题与解决方案

1. 开发环境准备

1.1 必需的开发工具

要使用SqlSugar进行开发,需要准备以下工具:

工具 版本要求 说明
.NET SDK .NET 6.0+ 或 .NET Framework 4.6.2+ 运行时环境
Visual Studio 2019/2022 推荐的IDE
VS Code 最新版 轻量级编辑器
Rider 最新版 JetBrains的IDE
数据库 任意支持的数据库 测试和开发用数据库

1.2 .NET版本支持

SqlSugar支持的.NET版本:

.NET Framework

  • .NET Framework 4.6.2
  • .NET Framework 4.7.x
  • .NET Framework 4.8

.NET Core / .NET

  • .NET Core 3.1
  • .NET 5.0
  • .NET 6.0(推荐)
  • .NET 7.0
  • .NET 8.0(推荐)
  • .NET 9.0

1.3 数据库准备

根据你的项目需求,准备相应的数据库:

开发测试推荐

  • SQLite:无需安装,适合快速开发和单元测试
  • MySQL:开源免费,社区支持好
  • SQL Server LocalDB:轻量级,VS自带

生产环境常用

  • MySQL 8.0
  • SQL Server 2019/2022
  • PostgreSQL 14+
  • Oracle 19c
  • 国产数据库(达梦、人大金仓等)

2. NuGet包安装与配置

2.1 核心包安装

安装SqlSugar核心包:

使用.NET CLI

dotnet add package SqlSugar

使用Package Manager Console

Install-Package SqlSugar

使用Visual Studio NuGet管理器

  1. 右键项目 → 管理NuGet程序包
  2. 搜索"SqlSugar"
  3. 点击安装

2.2 数据库驱动包

根据使用的数据库,安装相应的驱动包:

MySQL

# 推荐使用MySqlConnector(性能更好)
dotnet add package MySqlConnector# 或使用官方驱动
dotnet add package MySql.Data

SQL Server

# .NET Core/.NET 5+ 已包含,无需额外安装
# .NET Framework 可能需要
dotnet add package System.Data.SqlClient

PostgreSQL

dotnet add package Npgsql

Oracle

# 官方驱动
dotnet add package Oracle.ManagedDataAccess.Core# 或使用免费驱动
dotnet add package Oracle.EntityFrameworkCore

SQLite

dotnet add package System.Data.SQLite.Core
# 或
dotnet add package Microsoft.Data.Sqlite

国产数据库

# 达梦
dotnet add package DmProvider# 人大金仓
dotnet add package Kdbndp# 神通
dotnet add package Oscar.Data.OscarClient

2.3 扩展包(可选)

根据需要安装扩展包:

# IOC容器扩展(用于依赖注入)
dotnet add package SqlSugar.IOC# 雪花ID生成器
dotnet add package SqlSugar.SnowFlakeId# 分布式锁
dotnet add package SqlSugar.DistributedLock

2.4 版本选择建议

<!-- 推荐的包版本 -->
<PackageReference Include="SqlSugar" Version="5.1.4.*" />

选择版本的建议:

  • 生产环境:使用稳定版本(如5.1.4.x)
  • 开发环境:可以尝试最新版本
  • 大版本升级:先在测试环境验证
  • 长期维护项目:锁定具体版本号

3. 连接字符串配置

3.1 各数据库连接字符串

MySQL

// 基本连接
"server=localhost;port=3306;database=testdb;uid=root;pwd=123456;charset=utf8mb4;"// 带连接池
"server=localhost;database=testdb;uid=root;pwd=123456;charset=utf8mb4;pooling=true;min pool size=5;max pool size=100;"// SSL连接
"server=localhost;database=testdb;uid=root;pwd=123456;sslmode=Required;"

SQL Server

// Windows身份验证
"Server=localhost;Database=TestDB;Integrated Security=True;"// SQL身份验证
"Server=localhost;Database=TestDB;User Id=sa;Password=123456;Encrypt=False;"// 带连接池
"Server=localhost;Database=TestDB;User Id=sa;Password=123456;Min Pool Size=5;Max Pool Size=100;"

PostgreSQL

// 基本连接
"Host=localhost;Port=5432;Database=testdb;Username=postgres;Password=123456;"// SSL连接
"Host=localhost;Database=testdb;Username=postgres;Password=123456;SSL Mode=Require;"

Oracle

// 基本连接
"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL)));User Id=system;Password=123456;"// 简化连接(需配置tnsnames.ora)
"Data Source=ORCL;User Id=system;Password=123456;"

SQLite

// 文件数据库
"Data Source=database.db;Version=3;"// 内存数据库
"Data Source=:memory:;Version=3;"// 带密码
"Data Source=database.db;Password=mypassword;Version=3;"

3.2 连接字符串最佳实践

1. 使用配置文件

// appsettings.json
{"ConnectionStrings": {"DefaultConnection": "server=localhost;database=testdb;uid=root;pwd=123456;"}
}

2. 使用环境变量

export DB_CONNECTION="server=localhost;database=testdb;uid=root;pwd=123456;"

3. 使用密钥管理

# 使用.NET Secret Manager
dotnet user-secrets set "ConnectionStrings:DefaultConnection" "server=..."

4. 生产环境加密

// 使用加密的连接字符串
var encryptedConnectionString = Configuration["ConnectionStrings:Encrypted"];
var connectionString = DecryptConnectionString(encryptedConnectionString);

3.3 连接字符串安全性

不要做的事

// ❌ 不要在代码中硬编码
var connectionString = "server=localhost;database=prod;uid=root;pwd=ProductionPassword123;";

应该做的事

// ✅ 从配置读取
var connectionString = Configuration.GetConnectionString("DefaultConnection");// ✅ 使用环境变量
var connectionString = Environment.GetEnvironmentVariable("DB_CONNECTION");// ✅ 使用Azure Key Vault等密钥管理服务
var connectionString = await keyVaultClient.GetSecretAsync("db-connection");

4. 依赖注入集成

4.1 原生依赖注入

在Startup.cs或Program.cs中配置:

// .NET 6+ Program.cs
using SqlSugar;var builder = WebApplication.CreateBuilder(args);// 注册SqlSugarClient
builder.Services.AddScoped<ISqlSugarClient>(s =>
{return new SqlSugarClient(new ConnectionConfig{ConnectionString = builder.Configuration.GetConnectionString("DefaultConnection"),DbType = DbType.MySql,IsAutoCloseConnection = true,InitKeyType = InitKeyType.Attribute});
});var app = builder.Build();

4.2 使用SqlSugar.IOC扩展

安装扩展包后:

using SqlSugar;
using SqlSugar.IOC;var builder = WebApplication.CreateBuilder(args);// 使用IOC扩展配置
builder.Services.AddSqlSugar(new IocConfig()
{ConnectionString = builder.Configuration.GetConnectionString("DefaultConnection"),DbType = IocDbType.MySql,IsAutoCloseConnection = true
});var app = builder.Build();

4.3 多数据库配置

配置多个数据库连接:

builder.Services.AddSqlSugar(new List<IocConfig>
{new IocConfig{ConfigId = "db1",ConnectionString = builder.Configuration.GetConnectionString("Db1"),DbType = IocDbType.MySql,IsAutoCloseConnection = true},new IocConfig{ConfigId = "db2",ConnectionString = builder.Configuration.GetConnectionString("Db2"),DbType = IocDbType.SqlServer,IsAutoCloseConnection = true}
});

4.4 在控制器中使用

[ApiController]
[Route("api/[controller]")]
public class UserController : ControllerBase
{private readonly ISqlSugarClient _db;public UserController(ISqlSugarClient db){_db = db;}[HttpGet]public async Task<IActionResult> GetUsers(){var users = await _db.Queryable<User>().ToListAsync();return Ok(users);}
}

5. ASP.NET Core项目集成

5.1 完整的项目配置

1. appsettings.json配置

{"Logging": {"LogLevel": {"Default": "Information"}},"ConnectionStrings": {"DefaultConnection": "server=localhost;database=myapp;uid=root;pwd=123456;charset=utf8mb4;"},"SqlSugar": {"IsAutoCloseConnection": true,"InitKeyType": "Attribute","AopLogEnabled": true}
}

2. Program.cs配置

using SqlSugar;var builder = WebApplication.CreateBuilder(args);// 添加SqlSugar服务
builder.Services.AddScoped<ISqlSugarClient>(s =>
{var config = builder.Configuration;var db = new SqlSugarClient(new ConnectionConfig{ConnectionString = config.GetConnectionString("DefaultConnection"),DbType = DbType.MySql,IsAutoCloseConnection = config.GetValue<bool>("SqlSugar:IsAutoCloseConnection"),InitKeyType = InitKeyType.Attribute});// 配置AOPif (config.GetValue<bool>("SqlSugar:AopLogEnabled")){db.Aop.OnLogExecuting = (sql, pars) =>{Console.WriteLine($"SQL: {sql}");};}return db;
});// 添加控制器
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();var app = builder.Build();// 中间件配置
if (app.Environment.IsDevelopment())
{app.UseSwagger();app.UseSwaggerUI();
}app.UseAuthorization();
app.MapControllers();
app.Run();

5.2 仓储模式集成

1. 定义仓储接口

public interface IRepository<T> where T : class, new()
{Task<T> GetByIdAsync(object id);Task<List<T>> GetAllAsync();Task<int> InsertAsync(T entity);Task<bool> UpdateAsync(T entity);Task<bool> DeleteAsync(object id);
}

2. 实现仓储类

public class Repository<T> : IRepository<T> where T : class, new()
{private readonly ISqlSugarClient _db;public Repository(ISqlSugarClient db){_db = db;}public async Task<T> GetByIdAsync(object id){return await _db.Queryable<T>().InSingleAsync(id);}public async Task<List<T>> GetAllAsync(){return await _db.Queryable<T>().ToListAsync();}public async Task<int> InsertAsync(T entity){return await _db.Insertable(entity).ExecuteReturnIdentityAsync();}public async Task<bool> UpdateAsync(T entity){return await _db.Updateable(entity).ExecuteCommandHasChangeAsync();}public async Task<bool> DeleteAsync(object id){return await _db.Deleteable<T>().In(id).ExecuteCommandHasChangeAsync();}
}

3. 注册仓储

builder.Services.AddScoped(typeof(IRepository<>), typeof(Repository<>));

5.3 工作单元模式

public interface IUnitOfWork
{void BeginTran();void CommitTran();void RollbackTran();ISqlSugarClient GetDbClient();
}public class UnitOfWork : IUnitOfWork
{private readonly ISqlSugarClient _db;public UnitOfWork(ISqlSugarClient db){_db = db;}public void BeginTran() => _db.Ado.BeginTran();public void CommitTran() => _db.Ado.CommitTran();public void RollbackTran() => _db.Ado.RollbackTran();public ISqlSugarClient GetDbClient() => _db;
}

6. 配置文件管理

6.1 appsettings.json配置

基础配置

{"SqlSugar": {"ConnectionString": "server=localhost;database=myapp;uid=root;pwd=123456;","DbType": "MySql","IsAutoCloseConnection": true,"InitKeyType": "Attribute","AopConfig": {"IsLogSql": true,"IsLogError": true,"IsLogSlowSql": true,"SlowSqlMilliseconds": 1000}}
}

多数据库配置

{"SqlSugar": {"Connections": [{"ConfigId": "Main","ConnectionString": "server=localhost;database=main;uid=root;pwd=123456;","DbType": "MySql","IsAutoCloseConnection": true},{"ConfigId": "Log","ConnectionString": "server=localhost;database=log;uid=root;pwd=123456;","DbType": "MySql","IsAutoCloseConnection": true}]}
}

6.2 读取配置的辅助类

public class SqlSugarConfig
{public string ConnectionString { get; set; }public string DbType { get; set; }public bool IsAutoCloseConnection { get; set; }public string InitKeyType { get; set; }public AopConfig AopConfig { get; set; }
}public class AopConfig
{public bool IsLogSql { get; set; }public bool IsLogError { get; set; }public bool IsLogSlowSql { get; set; }public int SlowSqlMilliseconds { get; set; }
}

6.3 使用配置类

var sqlSugarConfig = builder.Configuration.GetSection("SqlSugar").Get<SqlSugarConfig>();builder.Services.AddScoped<ISqlSugarClient>(s =>
{var db = new SqlSugarClient(new ConnectionConfig{ConnectionString = sqlSugarConfig.ConnectionString,DbType = Enum.Parse<DbType>(sqlSugarConfig.DbType),IsAutoCloseConnection = sqlSugarConfig.IsAutoCloseConnection,InitKeyType = Enum.Parse<InitKeyType>(sqlSugarConfig.InitKeyType)});// 配置AOPif (sqlSugarConfig.AopConfig.IsLogSql){db.Aop.OnLogExecuting = (sql, pars) =>{// 记录SQL日志};}return db;
});

7. 多环境配置

7.1 环境配置文件

创建不同环境的配置文件:

appsettings.json              # 基础配置
appsettings.Development.json  # 开发环境
appsettings.Staging.json      # 测试环境
appsettings.Production.json   # 生产环境

appsettings.Development.json

{"ConnectionStrings": {"DefaultConnection": "server=localhost;database=myapp_dev;uid=root;pwd=dev123;"},"SqlSugar": {"AopConfig": {"IsLogSql": true}}
}

appsettings.Production.json

{"ConnectionStrings": {"DefaultConnection": "server=prod-server;database=myapp;uid=produser;pwd=***;"},"SqlSugar": {"AopConfig": {"IsLogSql": false}}
}

7.2 环境切换

1. 通过环境变量

# Windows
set ASPNETCORE_ENVIRONMENT=Production# Linux/Mac
export ASPNETCORE_ENVIRONMENT=Production

2. launchSettings.json

{"profiles": {"Development": {"environmentVariables": {"ASPNETCORE_ENVIRONMENT": "Development"}},"Production": {"environmentVariables": {"ASPNETCORE_ENVIRONMENT": "Production"}}}
}

7.3 根据环境动态配置

var builder = WebApplication.CreateBuilder(args);if (builder.Environment.IsDevelopment())
{// 开发环境特殊配置builder.Services.AddScoped<ISqlSugarClient>(s =>{var db = new SqlSugarClient(new ConnectionConfig{ConnectionString = builder.Configuration.GetConnectionString("DefaultConnection"),DbType = DbType.MySql,IsAutoCloseConnection = true});// 开发环境启用SQL日志db.Aop.OnLogExecuting = (sql, pars) =>{Console.WriteLine($"[SQL] {sql}");};return db;});
}
else
{// 生产环境配置builder.Services.AddScoped<ISqlSugarClient>(s =>{var db = new SqlSugarClient(new ConnectionConfig{ConnectionString = builder.Configuration.GetConnectionString("DefaultConnection"),DbType = DbType.MySql,IsAutoCloseConnection = true});// 生产环境只记录慢SQLdb.Aop.OnLogExecuting = (sql, pars) =>{// 记录到日志系统};return db;});
}

8. 常见问题与解决方案

8.1 连接失败问题

问题1:连接字符串错误

错误:Unable to connect to any of the specified MySQL hosts

解决方案:

// 检查连接字符串格式
// ✅ 正确
"server=localhost;database=test;uid=root;pwd=123;"// ❌ 错误(多余分号)
"server=localhost;database=test;uid=root;pwd=123;;"

问题2:数据库驱动未安装

错误:Could not load file or assembly 'MySqlConnector'

解决方案:

dotnet add package MySqlConnector

8.2 依赖注入问题

问题:SqlSugarClient生命周期不正确

错误:Cannot access a disposed object

解决方案:

// ❌ 错误(Singleton会导致问题)
builder.Services.AddSingleton<ISqlSugarClient>(...);// ✅ 正确(使用Scoped)
builder.Services.AddScoped<ISqlSugarClient>(...);

8.3 CodeFirst问题

问题:表未创建

// 确保调用InitTables
db.CodeFirst.InitTables(typeof(User), typeof(Order));

8.4 性能问题

问题:大量数据查询慢

解决方案:

// ❌ 避免使用ToList()加载全部数据
var all = db.Queryable<User>().ToList(); // 可能有数百万条// ✅ 使用分页
var page = db.Queryable<User>().ToPageList(1, 100);// ✅ 使用游标
await db.Queryable<User>().ForEachAsync(user =>
{// 处理每条数据
});

8.5 中文乱码问题

MySQL中文乱码

// 在连接字符串中添加charset
"server=localhost;database=test;uid=root;pwd=123;charset=utf8mb4;"

8.6 时区问题

MySQL时区问题

// 方法1:连接字符串设置
"server=localhost;database=test;uid=root;pwd=123;Convert Zero Datetime=True;"// 方法2:全局配置
db.Ado.IsEnableLogEvent = true;
db.Ado.SqlExecutingTime = DateTime.Now;

本章小结

本章详细介绍了SqlSugar的环境配置和项目集成:

  1. 开发环境:准备必要的工具和数据库
  2. NuGet安装:安装核心包和数据库驱动
  3. 连接配置:各种数据库的连接字符串
  4. 依赖注入:在ASP.NET Core中集成SqlSugar
  5. 项目集成:完整的项目配置示例
  6. 配置管理:使用appsettings.json管理配置
  7. 多环境:开发、测试、生产环境的配置
  8. 问题解决:常见问题的解决方案

掌握这些配置知识后,你就可以在任何.NET项目中轻松使用SqlSugar了。

在下一章,我们将深入学习数据库连接的高级配置和管理。


下一章:第三章:数据库连接与配置

http://www.jsqmd.com/news/367397/

相关文章:

  • 2026年贵阳二手房急售方案大比拼:三大报价策略优劣势全解析 - 精选优质企业推荐榜
  • AI系统架构评审中的成本优化:5个技巧帮你降低算力开支
  • 2026年2月淄博企业培训公司推荐,课程落地效果好的本地机构 - 品牌鉴赏师
  • 第六章-高级查询与Lambda表达式
  • Min-Max归一化
  • 第八章-事务处理
  • AVL树:平衡二叉查找树的奥秘
  • Python核心语法-Numpy - 努力-
  • Nginx性能优化 - 努力-
  • 第五章-基础CRUD操作
  • 互联网大厂Java面试:音视频场景技巧攻防与体系设计深度解析
  • LLaVA-v1.6-7B多模态模型5分钟快速部署指南:Ollama一键安装
  • 通义千问轻量模型:开发者API文档检索效率提升35%
  • 一键启动Qwen3-ForcedAligner:语音处理从未如此简单
  • 第九章-分页查询与性能优化
  • ollama部署Phi-4-mini-reasoning:轻量级推理模型5分钟快速上手
  • 长春保险理赔律师推荐:李晓伟律师团队权威背书与媒体认可全记录 - 铅笔写好字
  • CogVideoX-2b效果对比:中文提示词与英文提示词输出差异
  • 告别黑白照片:cv_unet_image-colorization一键上色效果惊艳展示
  • 云计算如何助力企业实现安全高效的规模化发展!
  • 第四章-实体类与CodeFirst
  • 京东e卡回收指南,三大正规平台解析 - 京顺回收
  • AI供应链惊魂!OpenClaw 341个恶意技能,正在收割全球用户数据
  • UI-TARS-desktop入门必看:零基础搭建AI开发环境
  • 第十一章-AOP与日志监控
  • AudioLDM-S极速版:1.2GB轻量级音效生成方案
  • 第十三章-多数据库支持
  • Qwen3-VL-8B应用案例:电商商品图片自动描述生成
  • App 的消亡与 Agent 的崛起:OpenClaw 启示录与本地化 AI 的反叛
  • 第十五章-高级特性与最佳实践