You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

发布.NET Core 2.0 MVC应用到Ubuntu Mate后找不到SQLite数据库

解答

这种情况其实是正常的,但背后的原因可能会让你有点困惑,我来给你拆解一下:

  • SQLite的自动创建机制:当你指定的SQLite数据库文件不存在时,SQLite会自动在对应的路径下创建这个文件。你说找不到文件,但应用能正常通信,说明数据库已经被自动创建了——只是它的位置可能不是你预期的地方。

  • 相对路径的坑:你用的"Data Source=database.sqlite;"是相对路径,这个路径对应的是应用运行时的工作目录,而不是你发布文件所在的文件夹。举个例子:

    • 如果你是直接在发布文件夹里运行dotnet YourApp.dll,那数据库文件会生成在这个发布文件夹里;
    • 但如果是通过systemd服务或者其他方式启动应用,工作目录可能被设置成了根目录(/)或者其他指定路径,这时候数据库文件就会出现在那个目录下,而不是你找的发布文件夹里。
  • 如何找到真实的文件位置:可以在代码里加一行日志或者调试输出,打印出数据库文件的完整路径:

    var dbPath = Path.GetFullPath("database.sqlite");
    Console.WriteLine($"SQLite数据库路径:{dbPath}");
    

    运行应用后就能看到文件实际存在哪里了。

  • 优化建议:为了避免这种路径混淆,建议改用绝对路径来指定数据库位置,比如:

    • 基于应用程序的基目录来拼接路径(推荐,适配不同部署场景):
      var dbPath = Path.Combine(AppContext.BaseDirectory, "database.sqlite");
      var connectionString = $"Data Source={dbPath};";
      
    • 或者直接写死绝对路径(适合固定部署位置的场景):
      var connectionString = "Data Source=/home/pi/your-publish-folder/database.sqlite;";
      

总的来说,你的操作不算错误,但使用相对路径容易导致文件位置不确定,改用绝对路径能让你更清晰地掌控数据库文件的位置。

内容的提问来源于stack exchange,提问作者Emanuele Leoni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:45:08