我的EF Core 1.1和ASP.NET Core 1.1应用程序正在MySolution/MyProject/bin/[Debug|Release]/netcoreapp1.1/MyDatabase.db
中查找其SQLite数据库(我认为这是默认设置)。我的迁移在该路径中创建/迁移了数据库,一切正常。
我尝试升级到netcoreapp2.0,我的迁移仍然写入该目录。但是在运行时,应用程序会在MySolution/MyProject/
而不是bin路径中查找数据库。所以当然失败了。
如何从以前恢复行为?
答案 0 :(得分:3)
这是EF Core 2.0(问题#7588)的重大变化。您应该将数据库文件移动到项目中并指定复制到输出目录。
答案 1 :(得分:2)
可以这样做,感谢@bricelam对related issue的建议:
services.AddDbContext<MyDbContext>(
options => {
var builder = new SqliteConnectionStringBuilder(_configuration.GetConnectionString("DefaultConnection"));
builder.DataSource = Path.Combine(AppContext.BaseDirectory, builder.DataSource);
options.UseSqlite(builder.ToString());
},
ServiceLifetime.Scoped);
我在开发过程中对此进行了测试,但我不确定它是否适用于生产,或者AppContext.BaseDirectory
是否可以安全使用(而不是IHostingEnvironment
或类似的东西)。