升级EFCore和Pomelo后执行迁移不再忽略视图的问题咨询
问题根因
EF Core 5.0 调整了ToView(null)的判定逻辑:3.x版本中该配置会被识别为「实体不需要参与迁移维护」,迁移工具会直接忽略对应实体;但5.0+版本中ToView(null)会被判定为「未分配对应视图的待映射对象」,迁移工具会默认将其作为普通表处理,因此会反复生成CreateTable/DropTable脚本。
解决方案
根据你的使用场景二选一即可:
- 如果该无键实体确实对应数据库中已存在的实际视图,直接在
ToView中传入真实视图名即可:
modelBuilder.Entity<NameOfView>().HasNoKey().ToView("你的实际视图名称");
- 如果该无键实体仅用于接收存储过程、原生SQL的返回结果,不映射任何实际的表/视图,使用EF Core 5.0新增的
ExcludeFromMigrations配置直接排除迁移即可:
modelBuilder.Entity<NameOfView>() .HasNoKey() .ToTable(nameof(NameOfView), t => t.ExcludeFromMigrations());
配置完成后删除之前自动生成的错误迁移文件,重新生成新的迁移就不会再出现多余的表操作脚本了。
内容的提问来源于stack exchange,提问作者Carel
相关产品推荐
相关产品推荐

