.NET Core 多项目工程生成EF迁移代码
错误表现
dotnet ef的官方文档针对的是单个项目的情况,即启动项目就是DbContext所在项目。
对于分层结构的解决方案如启动项目是WebApi项目,DbContext在基础设施项目,在WebApi项目下运行dotnet ef migrations XYZ 就会报No DbContext was found in assembly ……
的错误,表示在当前程序集找不到DbContext。
解决办法
这时候需要用-p
参数指定DbContext所在项目的目录,就能够定位到DbContext。
另外还需要在DbContext所在项目新建一个实现IDesignTimeDbContextFactory
补充
dotnet-ef启动的时候并不是执行代码中的Program.Main方法,而是直接载入程序集,查找继承DbContext的类,然后反射得到配置信息,生成执行代码。