一、开发环境:Windows11/Mysql8.0.29-x/Net Core3.1/SqlSugar5.1.4.60
二、appsettings.json 配置
"ConnectionStrings": {
"studentBase": "Server=数据库IP;port=端口;database=数据库名称;user=账号;password=密码;charset=utf8;Pooling=True;Max Pool Size=3000;Connect Timeout=60;Connection Lifetime=3600;sslMode=None;AllowLoadLocalInfile=true;"
}
三、Startup 注入SqlSugarContext
// 注入 Startup
services.AddSugarDbContext<StudentSugarContext>(Configuration.GetConnectionString("studentBase"));
四、实现扩展方法:AddSugarDbContext
/// <summary>
/// 添加Sugar上下文
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="services"></param>
/// <param name="connectionString">数据库链接字符串</param>
/// <param name="enableSqlLog">是否启用Sql日志输出</param>
public static void AddSugarDbContext<T>(this IServiceCollection services, string connectionString, bool enableSqlLog = false) where T : SugarContextBase
{
services.AddScoped<T>();
var name = typeof(T).Name;
var options = services.AddOptions<ConnectionConfig>(name);
services.Configure<ConnectionConfig>(name, op =>
{
op.ConfigId = name;
op.ConnectionString = connectionString;
op.DbType = DbType.MySql;
op.IsAutoCloseConnection = true;
if (enableSqlLog)
{
op.AopEvents = new AopEvents
{
OnLogExecuting = (sql, pars) =>
{
Console.WriteLine($"{string.Join(", ", pars?.Select(it => it.ParameterName + "=" + it.Value))}");
Console.WriteLine(sql);
}
};
}
});
}
五、 实现上下文Context:StudentSugarContext
public abstract class SugarContextBase
{
public readonly SqlSugarClient SugarClient;
public SugarContextBase(IOptionsSnapshot<ConnectionConfig> namedOptionsAccessor)
{
var options = namedOptionsAccessor.Get(this.GetType().Name);
SugarClient = new SqlSugarClient(options);
}
}
public class StudentSugarContext : SugarContextBase
{
public StudentSugarContext(IOptionsSnapshot<ConnectionConfig> namedOptionsAccessor) : base(namedOptionsAccessor)
{
}
}
六、业务写入(注入上下文)
[SugarTable("student")]
public class Student
{
public Student() { }
[SugarColumn(IsPrimaryKey = true)]
public string Id { get; set; }
public string Name { get; set; }
public string Bo_Id { get; set; }
}
private readonly StudentSugarContext _studentSugarContext;
public StudentController(StudentSugarContext _studentSugarContext)
{
this._studentSugarContext = _studentSugarContext;
}
//
public async void WritBusindessInfo(){
#region 测试数据
var data = new List<Student>();
for (int i = 0; i < 1000000; i++)
{
data.Add(new Student { Name = $"Test{i}", Bo_Id = $"{i}" });
}
#endregion
using var transaction = _studentSugarContext.SugarClient.UseTran();
await _studentSugarContext.SugarClient.Fastest<Student>().BulkCopyAsync(data);
transaction.CommitTran();
}
七、检查数据是否写入成功