Files
Moonlight/Moonlight.ApiServer/Helpers/DatabaseContext.cs

49 lines
1.5 KiB
C#

using Microsoft.EntityFrameworkCore;
using Moonlight.ApiServer.Configuration;
using Pomelo.EntityFrameworkCore.MySql.Infrastructure;
namespace Moonlight.ApiServer.Helpers;
public abstract class DatabaseContext : DbContext
{
public abstract string Prefix { get; }
private readonly AppConfiguration Configuration;
public DatabaseContext(AppConfiguration configuration)
{
Configuration = configuration;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (optionsBuilder.IsConfigured)
return;
var config = Configuration.Database;
var connectionString = $"host={config.Host};" +
$"port={config.Port};" +
$"database={config.Database};" +
$"uid={config.Username};" +
$"pwd={config.Password}";
optionsBuilder.UseMySql(
connectionString,
ServerVersion.AutoDetect(connectionString),
builder =>
{
builder.EnableRetryOnFailure(5);
builder.SchemaBehavior(MySqlSchemaBehavior.Translate, (name, objectName) => $"{name}_{objectName}");
builder.MigrationsHistoryTable($"{Prefix}_MigrationHistory");
}
);
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Model.SetDefaultSchema(Prefix);
base.OnModelCreating(modelBuilder);
}
}