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

Use the same EF database path in EF Core 1.1 and 2.0

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

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

如何恢复之前的行为?

这是 EF Core 2.0 中的重大更改(问题 #7588)。您应该将数据库文件移动到您的项目中并指定复制到输出目录

可以这样做,感谢@bricelam 的建议 :

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