实体框架核心SQLite如何使用相对数据源



在我目前的一个项目中,我在ASP.Net-Project中使用实体框架核心和SQLite。

我的问题是,使用了项目文件中的数据库,而不是中的数据库/bin目录

我按照docs.microsoft-page的说明创建了数据库:

https://learn.microsoft.com/de-de/ef/core/get-started/overview/first-app?tabs=visual-工作室

这是我正在使用的Connectionstring。

protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseSqlite("Data Source=MySqliteDatabase.db");

我让创建的数据库在更新时被复制。

我浏览了许多页面,寻找提供相对数据库路径的方法,但我找不到解决方案。它要么仍然使用项目数据库文件,要么因为无法打开而不会创建新的数据库,等等

有人能解决这个问题吗?我注意到Entity-Framework-Core-5是一个新版本,这可能是这个特定版本的bug或类似版本吗?

感谢@Sergey和@ErikEJ。

所以为了解决这个问题,我真的需要提供目录的完整路径。由于Directory.GetCurrentDirectory返回了错误的路径,即项目目录的路径,而不是/bin/Debug/...,我使用以下代码查看了配置文件中命名的路径,名为@Sergey suggested:

AppDomain.CurrentDomain.SetupInformation.ApplicationBase

我是从以下Stackoverflow页面得到的:如何查找活动app.config文件的路径?

上面说,要访问ConfigurationFile-属性,但对于ASP.Net,我想是ApplicationBase

在那里有一个正确的路径,一个/bin/Debug/...

总之,我的新方法看起来是这样的:

protected override void OnConfiguring(DbContextOptionsBuilder options)
{
string databasePath = $"{AppDomain.CurrentDomain.SetupInformation.ApplicationBase}MySqliteDatabase.db";
options.UseSqlite($"Data Source={databasePath}");
}

这对我来说很有效,非常感谢你的支持,也许这也会帮助其他人。

最新更新