diff --git a/Content.Server.Database/Configuration.cs b/Content.Server.Database/Configuration.cs index 1541b42ed8..6db9a594d3 100644 --- a/Content.Server.Database/Configuration.cs +++ b/Content.Server.Database/Configuration.cs @@ -1,4 +1,5 @@ -using Microsoft.EntityFrameworkCore; +using Microsoft.Data.Sqlite; +using Microsoft.EntityFrameworkCore; using Npgsql; namespace Content.Server.Database @@ -50,9 +51,10 @@ namespace Content.Server.Database public class SqliteConfiguration : IDatabaseConfiguration { - private readonly string _databaseFilePath; + private readonly string? _databaseFilePath; - public SqliteConfiguration(string databaseFilePath) + /// If null, an in-memory database is used. + public SqliteConfiguration(string? databaseFilePath) { _databaseFilePath = databaseFilePath; } @@ -62,7 +64,20 @@ namespace Content.Server.Database get { var optionsBuilder = new DbContextOptionsBuilder(); - optionsBuilder.UseSqlite($"Data Source={_databaseFilePath}"); + SqliteConnection connection; + if (_databaseFilePath != null) + { + connection = new SqliteConnection($"Data Source={_databaseFilePath}"); + } + else + { + connection = new SqliteConnection("Data Source=:memory:"); + // When using an in-memory DB we have to open it manually + // so EFCore doesn't open, close and wipe it. + connection.Open(); + } + + optionsBuilder.UseSqlite(connection); return optionsBuilder.Options; } } diff --git a/Content.Server/Preferences/ServerPreferencesManager.cs b/Content.Server/Preferences/ServerPreferencesManager.cs index 9b10a7e725..ac9e944f56 100644 --- a/Content.Server/Preferences/ServerPreferencesManager.cs +++ b/Content.Server/Preferences/ServerPreferencesManager.cs @@ -50,11 +50,11 @@ namespace Content.Server.Preferences { case "sqlite": var configPreferencesDbPath = _configuration.GetCVar("database.prefs_sqlite_dbpath"); - var finalPreferencesDbPath = + var inMemory = _resourceManager.UserData.RootDir == null; + var finalPreferencesDbPath = inMemory ? + null : Path.Combine(_resourceManager.UserData.RootDir, configPreferencesDbPath); - dbConfig = new SqliteConfiguration( - finalPreferencesDbPath - ); + dbConfig = new SqliteConfiguration(finalPreferencesDbPath); break; case "postgres": dbConfig = new PostgresConfiguration(