我的项目是DDD类型分层的,vs启动项目是web层,而dbContext类是在dal层。当我在PMC中使用ef core的add-migration生成迁移文件时,报错提示我需要再增加一个IDesignTimeDbContextFactory接口的实现,我照做了,于是我继续在PMC下生成迁移:
默认项目:Developer.web
命令:Add-Migration Init -O ../Developer.web/Migrations -P Developer.DAL -V
的确是生成了Migrations文件,但是在DAL层也生成了一模一样的Init.cs以及Design.cs和数据快照文件,而且,继续使用Add-Migrations命令时,还是依旧会在DAL层生成数据快照文件,这就不应该,按道理快照文件只会生成一份的。如果我删除了DAL层的数据迁移文件,那么每次Add-Migration都会生成全新的数据迁移文件(重新生成所有的数据库)。也就是说,efcore参照的数据快照文件并不是web层的migrations下的快找文件,而是dal层的快照。
DAL层的dbcontext:
DAL层生成的数据迁移文件(按道理并不应该生成)
web层的数据迁移文件
designtimedbcontextfactory的代码:
startup的代码:
是的啊,EF又不是神仙,所以有些东西得靠你想办法。
比如就不要在DAL层运行迁移命令呗。
你好,dbcontext就是dal层,这是历史设计的原因,我只是接受维护并开发这个项目的。efcore的数据迁移必须要在dbcontext的所在程序集。
@又见阿郎: 所以要你动脑筋。多看看EF文章你行的。
@爱编程的大叔: 已经多动脑经了,昨晚加班搞到半夜。我得出的结论就是efcore的迁移是根据dal层的数据快照文件,而不是web层的快找文件。这个是根本问题,google也找了,并没有其余人遇到这种类似的情况
@又见阿郎: 没人解答你的问题啊,
那我说了, 简单的说,就是你的结论是对的啊,那就按照这个结论设计和组织你的项目。