pet*_*erc 3 asp.net sqlite asp.net-web-api ef-core-2.0
我刚刚将 SQLite 添加到我的 asp.net webApi 项目中,并且无法确定如何将 App_Data 文件夹的路径传递给 DbContextOptionsBuilderUseSqlite
我在web.configI have a link to an external a config file with the conenction string ...
<connectionStrings configSource="config\connectionStrings.config"/>
Run Code Online (Sandbox Code Playgroud)
在那里我有...
<connectionStrings>
<add name="MyDatastore"
connectionString="DataSource=./App_Data/test.sqlite" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
而在我的DbContext.OnConfiguring我有....
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
string path = WebConfigurationManager.ConnectionStrings["MyDatastore"].ConnectionString;
optionsBuilder.UseSqlite(path);
}
}
Run Code Online (Sandbox Code Playgroud)
路径被正确检索(我可以看到我得到了配置的路径 connectionStrings.config
所以./App_Data/test.sqlite传递给optionsBuilder.UseSqlite(path).
但是,我收到以下错误...
SQLite Error 14: 'unable to open database file'.
Run Code Online (Sandbox Code Playgroud)
如果我刚刚使用connectionString="DataSource=test.sqlite" />它似乎神奇地在 App_Data 文件夹中找到该文件,当我在我的开发机器上运行调试时,但我在另一台机器(发布版本)上遇到了问题。我认为这是路径,尽管我得到的只是“无法打开数据库文件”。
我也试过了。。
connectionString="DataSource=|DataDirectory|test.sqlite" />
Run Code Online (Sandbox Code Playgroud)
这给了我一个Illegal characters in path错误。
以下确实有效(完整路径)
connectionString="d:\0\test.sqlite" />
Run Code Online (Sandbox Code Playgroud)
但我希望能够使用相对路径,例如甚至.\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();
Run Code Online (Sandbox Code Playgroud)