如何从Worker Service项目为独立类库中的DbContext生成Migration
问题解答
完全可以实现,只需要完成以下配置后执行对应的迁移命令即可:
前置依赖配置
- 存放DbContext的独立类库、Worker Service两个项目都需要安装对应版本的EF Core相关包:基础包
Microsoft.EntityFrameworkCore、设计时工具包Microsoft.EntityFrameworkCore.Design,以及对应数据库的提供程序包(比如SqlServer对应Microsoft.EntityFrameworkCore.SqlServer、PostgreSQL对应Npgsql.EntityFrameworkCore.PostgreSQL)。
DbContext实例获取配置(二选一即可)
- 方案一:在Worker Service中注册DbContext
在Worker Service的Program.cs文件中通过AddDbContext<T>方法注入你的DbContext,从Worker Service的配置文件中读取对应数据库连接字符串传入即可,EF Core工具执行迁移时会自动从启动项目的服务注册信息中获取DbContext实例。 - 方案二:在DbContext类库中添加设计时工厂
在存放DbContext的类库中新建一个实现IDesignTimeDbContextFactory<T>接口的工厂类,在类的CreateDbContext方法中配置并返回你的DbContext实例,EF Core工具执行时会自动识别该工厂类生成DbContext,不需要额外修改Worker Service的代码。
迁移生成命令
执行命令时需要同时指定DbContext所在的类库项目和作为启动项目的Worker Service:
- 若使用Package Manager Console(PMC)执行:
Add-Migration 自定义迁移名称 -Project [你的DbContext类库项目名] -StartupProject [你的Worker Service项目名] - 若使用dotnet CLI执行:
dotnet ef migrations add 自定义迁移名称 --project [你的DbContext类库项目路径] --startup-project [你的Worker Service项目路径]
注意:执行迁移命令前请保证两个项目都可以正常编译,连接字符串配置有效,否则会因为无法初始化DbContext导致迁移生成失败。
内容的提问来源于stack exchange,提问作者Arafin Ahmed
相关产品推荐
相关产品推荐

