Added setup code
This commit is contained in:
parent
19b9851832
commit
c0ffd58268
56
I18N Commander/DataModel/Setup.cs
Normal file
56
I18N Commander/DataModel/Setup.cs
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
using DataModel.Database.Common;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.Hosting;
|
||||||
|
|
||||||
|
namespace DataModel;
|
||||||
|
|
||||||
|
public static class Setup
|
||||||
|
{
|
||||||
|
private const string ENV_EF_TOOLING_DATABASE = "ENV_EF_TOOLING_DATABASE";
|
||||||
|
private const string DB_READ_WRITE_MODE = "ReadWrite";
|
||||||
|
private const string DB_READ_WRITE_CREATE_MODE = "ReadWriteCreate";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Tries to migrate the data file.
|
||||||
|
/// </summary>
|
||||||
|
public static async Task PerformDataMigration(DataContext dbContext)
|
||||||
|
{
|
||||||
|
var pendingMigrations = (await dbContext.Database.GetPendingMigrationsAsync()).ToList();
|
||||||
|
foreach (var pendingMigration in pendingMigrations)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"The migration '{pendingMigration}' is pending.");
|
||||||
|
}
|
||||||
|
|
||||||
|
await dbContext.Database.MigrateAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Add the database to the DI system
|
||||||
|
/// </summary>
|
||||||
|
public static void AddDatabase(this IServiceCollection serviceCollection, string path2DataFile, bool createWhenNecessary = true)
|
||||||
|
{
|
||||||
|
serviceCollection.AddDbContext<DataContext>(options => options.UseSqlite($"Filename={path2DataFile};Mode={(createWhenNecessary ? DB_READ_WRITE_CREATE_MODE : DB_READ_WRITE_MODE)}"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sets up the DI & db context ready for the EF tooling.
|
||||||
|
/// </summary>
|
||||||
|
public static IHostBuilder Setup4EFTooling(string[] args)
|
||||||
|
{
|
||||||
|
var dataFile = Environment.GetEnvironmentVariable(ENV_EF_TOOLING_DATABASE);
|
||||||
|
if (string.IsNullOrWhiteSpace(dataFile))
|
||||||
|
{
|
||||||
|
Console.WriteLine("In order to use EF tooling, point the environment variable ENV_EF_TOOLING_DATABASE to the data file, which should be used for the EF tooling.");
|
||||||
|
Environment.Exit(100);
|
||||||
|
}
|
||||||
|
|
||||||
|
var builder = Host.CreateDefaultBuilder(args);
|
||||||
|
builder.ConfigureServices((hostContext, serviceCollection) =>
|
||||||
|
{
|
||||||
|
serviceCollection.AddDbContext<DataContext>(options => options.UseSqlite($"Filename={dataFile};Mode=ReadWriteCreate"));
|
||||||
|
});
|
||||||
|
|
||||||
|
return builder;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user