Add database Initializer

This commit is contained in:
Runebaas 2018-05-09 18:51:53 +02:00
parent 177942f7fe
commit 3425896c0b
No known key found for this signature in database
GPG key ID: 2677AF508D0300D6
5 changed files with 98 additions and 11 deletions

View file

@ -0,0 +1,43 @@
using System;
using Geekbot.net.Lib;
using Geekbot.net.Lib.Logger;
namespace Geekbot.net.Database
{
public class DatabaseInitializer
{
private readonly RunParameters _runParameters;
private readonly GeekbotLogger _logger;
public DatabaseInitializer(RunParameters runParameters, GeekbotLogger logger)
{
_runParameters = runParameters;
_logger = logger;
}
public DatabaseContext Initzialize()
{
DatabaseContext database = null;
try
{
if (_runParameters.InMemory)
{
database = new InMemoryDatabase("geekbot");
}
else
{
database = new SqlDatabase(new SqlConnectionString());
}
database.Database.EnsureCreated();
}
catch (Exception e)
{
_logger.Error(LogSource.Geekbot, "Could not Connect to datbase", e);
Environment.Exit(GeekbotExitCode.DatabaseConnectionFailed.GetHashCode());
}
return database;
}
}
}

View file

@ -0,0 +1,19 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
namespace Geekbot.net.Database
{
public class InMemoryDatabase : DatabaseContext
{
private readonly string _name;
public InMemoryDatabase(string name)
{
_name = name;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.UseLoggerFactory(new LoggerFactory().AddConsole())
.UseInMemoryDatabase(databaseName: _name);
}
}

View file

@ -0,0 +1,16 @@
namespace Geekbot.net.Database
{
public class SqlConnectionString
{
public string Server { get; set; } = "localhost";
public string Port { get; set; } = "3306";
public string Database { get; set; } = "geekbot";
public string Username { get; set; } = "geekbot";
public string Password { get; set; } = "";
public override string ToString()
{
return $"Server={Server};Port={Port};Database={Database};Uid={Username};Pwd={Password};";
}
}
}

View file

@ -0,0 +1,19 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
namespace Geekbot.net.Database
{
public class SqlDatabase : DatabaseContext
{
private readonly SqlConnectionString _connectionString;
public SqlDatabase(SqlConnectionString connectionString)
{
_connectionString = connectionString;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.UseLoggerFactory(new LoggerFactory().AddConsole())
.UseMySql(_connectionString.ToString());
}
}

View file

@ -107,17 +107,7 @@ namespace Geekbot.net
_firstStart = true;
}
DatabaseContext database = null;
try
{
database = new DatabaseContext();
database.Database.EnsureCreated();
}
catch (Exception e)
{
logger.Error(LogSource.Geekbot, "Could not Connect to datbase", e);
Environment.Exit(GeekbotExitCode.DatabaseConnectionFailed.GetHashCode());
}
var database = new DatabaseInitializer(runParameters, logger).Initzialize();
_services = new ServiceCollection();