一个为SharwAPI设计的数据库服务插件,提供灵活、可配置的数据库访问能力。
- 把插件文件(一般为
sharwapi.Plugin.database.dll)放入SharwApi框架运行目录的/Plugins文件夹下即可。 - 在
appsettings.json中添加DatabasePlugin字典:
ExposePluginWebApi: 布尔值,决定插件是否暴露插件的网络Api,WIP(功能尚在开发)
• 可以直接从 DI 获取IDatabaseService,或者使用 IDatabaseServiceFactory 临时创建服务实例。
• 在每个作用域/请求中必须在使用DatabaseService前设置DatabaseContext
var builder = WebApplication.CreateBuilder(args);
// 注册 IDatabaseContext 实现
services.AddSingleton<IDatabaseContext>(serviceProvider =>
{
return new DatabaseContext
{
ConnectionString = configuration.GetConnectionString("DefaultConnection") ?? throw new ArgumentException("DefaultConnection is required to be configured."),
DatabaseType = configuration.GetValue<string>($"{DatabaseContext.SectionName}:DatabaseType") ?? throw new ArgumentException("DatabaseType is required to be configured."),
CommandTimeout = configuration.GetValue<int>($"{DatabaseContext.SectionName}:CommandTimeout"),
UseTransaction = configuration.GetValue<bool>($"{DatabaseContext.SectionName}:UseTransaction"),
};
});
var app = builder.Build();
app.MapGet("/test-connection", async (IDatabaseServiceFactory factory) =>
{
var conn = app.Configuration.GetConnectionString("Default") ?? throw new InvalidOperationException("No connection string configured");
using var svc = factory.CreateService(conn) as IDisposable; // DatabaseService 实现了 IDisposable
var db = factory.CreateService(conn);
var ok = await db.TestConnectionAsync();
return Results.Ok(new { ok });
});
//不要忘了
app.Run();数据库操作主接口,提供:
QueryAsync<T>- 执行查询ExecuteAsync- 执行非查询命令GetContext()- 获取当前数据库上下文TestConnectionAsync()- 测试连接Dispose()- 释放资源
数据库服务工厂,用于创建特定连接的数据库实例:
CreateService(string connectionString)- 通过连接字符串创建CreateService(DatabaseContext context)- 通过完整上下文创建
数据库上下文对象,包含:
ConnectionString- 数据库连接字符串CommandTimeout- 命令超时时间DatabaseType- 数据库类型(SqlServer/PostgreSQL/MySQL)UseTransaction- 是否使用事务
...WIP...(功能尚在开发)
- .NET 6.0 或更高版本