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