在EF Core 1.1和2.0中使用相同的EF数据库路径

时间:2017-08-30 07:00:09

标签: entity-framework asp.net-core entity-framework-core asp.net-core-2.0

我的EF Core 1.1和ASP.NET Core 1.1应用程序正在MySolution/MyProject/bin/[Debug|Release]/netcoreapp1.1/MyDatabase.db中查找其SQLite数据库(我认为这是默认设置)。我的迁移在该路径中创建/迁移了数据库,一切正常。

我尝试升级到netcoreapp2.0,我的迁移仍然写入该目录。但是在运行时,应用程序会在MySolution/MyProject/而不是bin路径中查找数据库。所以当然失败了。

如何从以前恢复行为?

2 个答案:

答案 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或类似的东西)。