namespace FileShare_EFCore.Database
{
///
/// 支持的数据库提供程序类型。
///
public enum DatabaseProvider
{
/// SQLite(本地文件数据库,无需安装,跨平台)
SQLite,
/// MySQL / MariaDB
MySQL,
/// PostgreSQL
PostgreSQL,
/// SQL Server
SqlServer
}
///
/// 数据库连接配置 —— 在 appsettings.json 中配置。
///
public class DatabaseConfiguration
{
/// 数据库提供程序
public DatabaseProvider Provider { get; set; } = DatabaseProvider.SQLite;
/// 连接字符串
public string ConnectionString { get; set; } = "Data Source=app.db";
/// 是否在启动时自动执行迁移
public bool AutoMigrate { get; set; } = true;
///
/// 是否在迁移前删除并重建当前连接指向的数据库。
/// 仅用于切换数据库类型或本地开发重建库;生产环境默认必须保持 false。
///
public bool RecreateDatabase { get; set; } = false;
/// 是否启用详细日志(会打印 SQL 语句)
public bool EnableDetailedLog { get; set; } = false;
/// 连接超时(秒)
public int Timeout { get; set; } = 30;
// ---- 快捷构建方法 ----
/// SQLite 本地数据库
public static DatabaseConfiguration ForSQLite(string dataSource = "app.db")
{
return new DatabaseConfiguration
{
Provider = DatabaseProvider.SQLite,
ConnectionString = $"Data Source={dataSource}",
AutoMigrate = true,
};
}
/// MySQL 数据库
public static DatabaseConfiguration ForMySQL(string server, string database, string user, string password, uint port = 3306)
{
return new DatabaseConfiguration
{
Provider = DatabaseProvider.MySQL,
ConnectionString = $"Server={server};Port={port};Database={database};User={user};Password={password};",
};
}
/// PostgreSQL 数据库
public static DatabaseConfiguration ForPostgreSQL(string host, string database, string username, string password, int port = 5432)
{
return new DatabaseConfiguration
{
Provider = DatabaseProvider.PostgreSQL,
ConnectionString = $"Host={host};Port={port};Database={database};Username={username};Password={password};",
};
}
/// SQL Server 数据库
public static DatabaseConfiguration ForSqlServer(string server, string database, string? user = null, string? password = null)
{
var connStr = string.IsNullOrEmpty(user)
? $"Server={server};Database={database};Trusted_Connection=True;TrustServerCertificate=True;"
: $"Server={server};Database={database};User Id={user};Password={password};TrustServerCertificate=True;";
return new DatabaseConfiguration
{
Provider = DatabaseProvider.SqlServer,
ConnectionString = connStr,
};
}
}
}