I have an ASP.NET Core 2.0 app using Entity Framework Core and the SQLite Provider. I am trying to store the SQLite database file in a subdirectory (specifically data\database\sqlite.db
) however if I set the Connection String to Data Source=data\database\sqlite.db
I get the following exception as soon as I run dbContext.Database.Migrate()
:
Microsoft.Data.Sqlite.SqliteException (0x80004005): SQLite Error 14: 'unable to open database file'.
If I set it to Data Source=sqlite.db
it works as expected without throwing exceptions (but not in the directory I need it to be stored in). What do I need to do to store the SQLite database file in a sub-directory relative to the current working directory?
For the sake of context: I need the SQLite database file stored in a sub-directory because this app is running in a Docker Container, this specific directory is mapped to a Docker volume so the database persists when the container is replaced.
You should modify to "Data Source=./data/database/sqlite.db"
"DefaultConnection": "DataSource=./data/database/sqlite.db"
I had a similar problem. I suppose that you are running your app in a .NET Core environment. You can do this in your "DbContext" class:
internal class YourDbContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder options)
{
string baseDir = AppDomain.CurrentDomain.BaseDirectory;
//if "bin" is present, remove all the path starting from "bin" word
if (baseDir.Contains("bin"))
{
int index = baseDir.IndexOf("bin");
baseDir = baseDir.Substring(0, index);
}
//String interpolation to reach the right path
options.UseSqlite($"Data Source={baseDir}YourFolderName\\SQLite.db");
}
public DbSet<YourEntity> Pluto { get; set; }
}
User contributions licensed under CC BY-SA 3.0