将ASP.NET MVC发布至Azure(SQLite)后数据获取失败
问题排查与解决方案
1. 先确认数据库文件是否真的部署到了Azure
你设置了Copy always但没勾选文件发布选项里的包含所有内容文件,这大概率导致数据库文件没被传到Azure:
- 登录Azure门户,进入你的App Service,打开高级工具 > Go进入Kudu控制台
- 在Kudu的
wwwroot目录下查看是否存在bloodpressuremeasurements.db- 如果没有,回到VS发布设置,勾选文件发布选项里的包含所有内容文件重新发布
- 也可以直接通过Kudu的文件管理器手动把本地的数据库文件上传到
wwwroot目录
2. 修正SQLite连接字符串的路径问题
Azure App Service的默认工作目录和本地不一样,直接写Data source=bloodpressuremeasurements.db会导致程序找不到文件:
- 修改
appsettings.json里的连接字符串为绝对路径:"ConnectionStrings": { "DefaultConnection": "Data Source=\\home\\site\\wwwroot\\bloodpressuremeasurements.db" } - 或者在代码里动态拼接
wwwroot路径:var dbPath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "bloodpressuremeasurements.db"); optionsBuilder.UseSqlite($"Data Source={dbPath}");
3. 解决数据库初始化的问题
你没勾选发布时应用迁移,云端的数据库可能根本没创建或初始化:
- 如果本地数据库已有测试数据,确保你要发布的是已经执行完所有迁移、包含数据的本地数据库文件
- 要是想让云端自动执行迁移,先解决之前的发布异常:
- 去Azure App Service的日志流里查看迁移失败的具体报错信息
- 确认
BloodPressureContext的配置正确,所有迁移类都在项目中 - 也可以手动在Kudu控制台执行迁移命令:
dotnet 你的项目名称.dll ef database update
4. 检查文件读写权限
SQLite需要对数据库所在目录有读写权限:
- Azure的
wwwroot目录默认有读写权限,别把数据库放在临时目录(比如%TEMP%),临时目录会被定期清理,还可能没有写入权限
内容的提问来源于stack exchange,提问作者theodorn
相关产品推荐
相关产品推荐

