Entity Framework Core SQLite 如何使用相对数据源

Posted

技术标签:

【中文标题】Entity Framework Core SQLite 如何使用相对数据源【英文标题】:Entity Framework Core SQLite How to use relative Data Source 【发布时间】:2021-04-09 10:22:42 【问题描述】:

在我当前的项目中,我在 ASP.Net 项目中使用 Entity Framework Core 和 SQLite。

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

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

https://docs.microsoft.com/de-de/ef/core/get-started/overview/first-app?tabs=visual-studio

这是我正在使用的连接字符串。

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

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

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

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

【问题讨论】:

在连接字符串中使用完整路径 @ErikEJ 这真的是唯一的方法吗?例如,当其他人将其拉到不同的路径时,我将如何在 Debug- 和 Release-Build 之间指定以及 git 呢?那它不会坏吗? 您是否尝试将连接字符串放入配置文件中? @Sergey 你指的是哪个配置文件? 如果您按照@ErikEJ 的建议放置完整的补丁,它总是更可靠。您可以从配置文件中获取此路径 【参考方案1】:

感谢@Sergey 和@ErikEJ。

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

AppDomain.CurrentDomain.SetupInformation.ApplicationBase

我是从以下 *** 页面获得的: How to find path of active app.config file?

那里说要访问ConfigurationFile-Property,但对于ASP.Net,我猜是ApplicationBase

其中有正确的路径,/bin/Debug/... 之一。

综上所述,我的新方法如下所示:

protected override void OnConfiguring(DbContextOptionsBuilder options)

    string databasePath = $"AppDomain.CurrentDomain.SetupInformation.ApplicationBaseMySqliteDatabase.db";
    options.UseSqlite($"Data Source=databasePath");

这对我有用,非常感谢您的支持,也许这对其他人也有帮助。

【讨论】:

以上是关于Entity Framework Core SQLite 如何使用相对数据源的主要内容,如果未能解决你的问题,请参考以下文章

请问在 .NET Core 中如何让 Entity Framework Core 在日志中记录由 LINQ 生成的SQL语句?

从 Entity Framework Core IQueryable<T> 获取 SQL 代码

使用 Entity Framework Core 的 SQL Server 查询中的参数化 OPENJSON

Entity Framework Core 计数没有最佳性能

在 .NET Core 中如何让 Entity Framework Core 在日志中记录由 LINQ 生成的SQL语句

使用 Entity Framework Core 和 ThreadPool 而不达到最大 SQL Server 连接