diff --git a/osu.Game/Database/OsuDbContext.cs b/osu.Game/Database/OsuDbContext.cs index 3f019a07fa..51fabb56fe 100644 --- a/osu.Game/Database/OsuDbContext.cs +++ b/osu.Game/Database/OsuDbContext.cs @@ -22,14 +22,29 @@ namespace osu.Game.Database public DbSet RulesetInfo { get; set; } private readonly string connectionString; - public OsuDbContext() + static OsuDbContext() { - connectionString = "DataSource=:memory:"; + // required to initialise native SQLite libraries on some platforms. + SQLitePCL.Batteries_V2.Init(); } - public OsuDbContext(string connectionString) + /// + /// Create a new OsuDbContext instance. + /// + /// A valid SQLite connection string. If not provided, an in-memory instance will be created. + public OsuDbContext(string connectionString = "DataSource=:memory:") { this.connectionString = connectionString; + + Database.SetCommandTimeout(new TimeSpan(TimeSpan.TicksPerSecond * 10)); + + var connection = Database.GetDbConnection(); + connection.Open(); + using (var cmd = connection.CreateCommand()) + { + cmd.CommandText = "PRAGMA journal_mode=WAL;"; + cmd.ExecuteNonQuery(); + } } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) diff --git a/osu.Game/OsuGameBase.cs b/osu.Game/OsuGameBase.cs index 590007494b..d1e684499c 100644 --- a/osu.Game/OsuGameBase.cs +++ b/osu.Game/OsuGameBase.cs @@ -81,21 +81,7 @@ namespace osu.Game protected override IReadOnlyDependencyContainer CreateLocalDependencies(IReadOnlyDependencyContainer parent) => dependencies = new DependencyContainer(base.CreateLocalDependencies(parent)); - private OsuDbContext createDbContext() - { - SQLitePCL.Batteries.Init(); - var connectionString = Host.Storage.GetDatabaseConnectionString(@"client"); - var context = new OsuDbContext(connectionString); - var connection = context.Database.GetDbConnection(); - connection.Open(); - using (var command = connection.CreateCommand()) - { - command.CommandText = "PRAGMA journal_mode=WAL;"; - command.ExecuteNonQuery(); - } - context.Database.SetCommandTimeout(new TimeSpan(TimeSpan.TicksPerSecond * 10)); - return context; - } + private OsuDbContext createDbContext() => new OsuDbContext(Host.Storage.GetDatabaseConnectionString(@"client")); [BackgroundDependencyLoader] private void load()