如何在 EF Core 3 的不同项目中输出 SQLite 数据库
How to output SQLite database in a different project in EF Core 3
我有一个包含 2 个项目的解决方案
src
|-ProjectA
|-ProjectB
ProjectA 是一个针对 netstandard2.1 的 class 库,它包含 DbContext(具有 "Data Source=blog.db"
)、实体并且依赖于 Microsoft.EntityFrameworkCore.Sqlite
ProjectB 以 netcoreapp3.1 为目标并依赖于 Microsoft.EntityFrameworkCore.Design
。我只是用它来管理迁移,因为迁移需要一个框架。
SQLite 数据库不存在,因此我使用 ProjectB 中的 dotnet 工具创建了第一个迁移
dotnet ef migrations add InitialCreate --project ../ProjectA
并且成功创建了包含初始文件夹的 Migrations 文件夹。
现在我想更新数据库,以便实际创建 SQLite *.db。
如果我这样做:
dotnet ef database update --project ../ProjectA
*.db 文件已创建,但在 ProjectB 中。我想在 ProjectA 中输出文件,但找不到方法。
文档似乎没有提及任何内容,ef database update --help
更新 1:我尝试从 ProjectA 创建和更新迁移并指向可执行项目,如下所示:
dotnet ef migrations add InitialCreate --startup-project ../ProjectB
并在 ProjectA 中正确创建迁移。现在我尝试应用它们来生成 *.db,如下所示:
dotnet ef database update --startup-project ../ProjectB
并生成 *.db 文件...但又是在 ProjectB 中!不在我想要的 ProjectA 中。
好像Microsoft.EntityFrameworkCore.Design
包在哪里,生成的数据库就在那里
更新 2:在更新数据库以指向 DbContext 所在的位置时指定项目也不起作用。它在项目 B
中不断生成 *.db
dotnet ef database update --startup-project ../Sasw.SimpleBlog.Storage.SQLite.Migrator/ --project ./
我通过在我的连接字符串中指定完整路径来修复它。这已经足够了,因为这个路径应该可以在设置中配置。
public class DatabaseContext
: DbContext
{
public DbSet<Thing> Things{ get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder options)
{
options.UseSqlite("Data Source=D:\database.db");
}
}
这里剩下的唯一问题是如何使用 dotnet ef
CLI 在运行时传递此连接字符串。但这似乎是一个悬而未决的问题 atm https://github.com/aspnet/EntityFrameworkCore/issues/10750
我知道这个回复有点晚了,但也许这有帮助,我还没试过。
您是否尝试过在 Visual Studio 的包管理器控制台中选择不同的默认项目?
我有一个包含 2 个项目的解决方案
src
|-ProjectA
|-ProjectB
ProjectA 是一个针对 netstandard2.1 的 class 库,它包含 DbContext(具有 "Data Source=blog.db"
)、实体并且依赖于 Microsoft.EntityFrameworkCore.Sqlite
ProjectB 以 netcoreapp3.1 为目标并依赖于 Microsoft.EntityFrameworkCore.Design
。我只是用它来管理迁移,因为迁移需要一个框架。
SQLite 数据库不存在,因此我使用 ProjectB 中的 dotnet 工具创建了第一个迁移
dotnet ef migrations add InitialCreate --project ../ProjectA
并且成功创建了包含初始文件夹的 Migrations 文件夹。
现在我想更新数据库,以便实际创建 SQLite *.db。 如果我这样做:
dotnet ef database update --project ../ProjectA
*.db 文件已创建,但在 ProjectB 中。我想在 ProjectA 中输出文件,但找不到方法。
文档似乎没有提及任何内容,ef database update --help
更新 1:我尝试从 ProjectA 创建和更新迁移并指向可执行项目,如下所示:
dotnet ef migrations add InitialCreate --startup-project ../ProjectB
并在 ProjectA 中正确创建迁移。现在我尝试应用它们来生成 *.db,如下所示:
dotnet ef database update --startup-project ../ProjectB
并生成 *.db 文件...但又是在 ProjectB 中!不在我想要的 ProjectA 中。
好像Microsoft.EntityFrameworkCore.Design
包在哪里,生成的数据库就在那里
更新 2:在更新数据库以指向 DbContext 所在的位置时指定项目也不起作用。它在项目 B
中不断生成 *.dbdotnet ef database update --startup-project ../Sasw.SimpleBlog.Storage.SQLite.Migrator/ --project ./
我通过在我的连接字符串中指定完整路径来修复它。这已经足够了,因为这个路径应该可以在设置中配置。
public class DatabaseContext
: DbContext
{
public DbSet<Thing> Things{ get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder options)
{
options.UseSqlite("Data Source=D:\database.db");
}
}
这里剩下的唯一问题是如何使用 dotnet ef
CLI 在运行时传递此连接字符串。但这似乎是一个悬而未决的问题 atm https://github.com/aspnet/EntityFrameworkCore/issues/10750
我知道这个回复有点晚了,但也许这有帮助,我还没试过。 您是否尝试过在 Visual Studio 的包管理器控制台中选择不同的默认项目?