我有一个使用Entity Framework Core和SQLite Provider的ASP.NET Core 2.0应用程序。我试图将SQLite数据库文件存储在子目录(特别是data\database\sqlite.db
)中,但是如果我将连接字符串设置为Data Source=data\database\sqlite.db
,则在运行dbContext.Database.Migrate()
时会出现以下异常:< / p>
Microsoft.Data.Sqlite.SqliteException (0x80004005): SQLite Error 14: 'unable to open database file'.
如果我将它设置为Data Source=sqlite.db
,它会按预期工作而不会抛出异常(但不会在我需要存储的目录中)。如何将SQLite数据库文件存储在相对于当前工作目录的子目录中?
为了上下文:我需要存储在子目录中的SQLite数据库文件,因为此应用程序在Docker容器中运行,此特定目录映射到Docker卷,因此在更换容器时数据库仍然存在。
答案 0 :(得分:0)
您应该修改为"Data Source=./data/database/sqlite.db"
"DefaultConnection": "DataSource=./data/database/sqlite.db"
答案 1 :(得分:0)
我有类似的问题。 我想您正在.NET Core环境中运行您的应用程序。您可以在“ DbContext”类中执行此操作:
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; }
}