gpt4 book ai didi

asp.net - EFCore SQLite 连接字符串与asp.net 中的相对路径

转载 作者:行者123 更新时间:2023-12-03 18:33:01 24 4
gpt4 key购买 nike

我刚刚将 SQLite 添加到我的 asp.net webApi 项目中,但在弄清楚如何将 App_Data 文件夹的路径传递给 DbContextOptionsBuilderUseSqlite 时遇到了麻烦。

我在 web.config 中有以下内容我有一个带有连接字符串的外部配置文件的链接...

<connectionStrings configSource="config\connectionStrings.config"/>

在那里我有...
    <connectionStrings>
<add name="MyDatastore"
connectionString="DataSource=./App_Data/test.sqlite" />
</connectionStrings>

而在我的 DbContext.OnConfiguring我有....
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
string path = WebConfigurationManager.ConnectionStrings["MyDatastore"].ConnectionString;
optionsBuilder.UseSqlite(path);
}
}

路径已正确检索(我可以看到我获得了在 connectionStrings.config 上配置的路径)

所以 ./App_Data/test.sqlite传递给 optionsBuilder.UseSqlite(path) .

但是,我收到以下错误...
SQLite Error 14: 'unable to open database file'. 

如果我只使用 connectionString="DataSource=test.sqlite" />然后它似乎神奇地在 App_Data 文件夹中找到了该文件,当我在我的开发机器上运行调试时,但我在另一台机器上遇到了问题(发布版本)。我认为这是路径,尽管我得到的只是“无法打开数据库文件”。

我也试过..
 connectionString="DataSource=|DataDirectory|test.sqlite" />

这给了我一个 Illegal characters in path错误。

以下确实有效(完整路径)
 connectionString="d:\0\test.sqlite" />

但我希望能够使用相对路径,例如甚至 .\datastore\test.sqlite .

有没有人对此有任何想法?

提前致谢

最佳答案

您必须在运行时修复相对路径:

var builder = new SqliteConnectionStringBuilder(connectionString);               
builder.DataSource = Path.GetFullPath(
Path.Combine(
AppDomain.CurrentDomain.GetData("DataDirectory") as string
?? AppDomain.CurrentDomain.BaseDirectory,
builder.DataSource);
connectionString = builder.ToString();

关于asp.net - EFCore SQLite 连接字符串与asp.net 中的相对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49290182/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com