如果你是想同时生成两套数据库,那是不可能的,你需要一个一个生成。
但是这并不是说你要分别建立数据库上下文,你可以同时建立多个数据库上下文,在Add-Migration的时候选择使用哪个数据库。
比如微软会提醒你:
More than one DbContext was found. Specify which one to use. Use the '-Context' parameter for PowerShell commands and the '--context' parameter for dotnet commands.
那我们按照微软说的:
Add-Migration Init -context MyDbContext
即可。
删除尚未应用到数据库的最新迁移
Add-Migration Init -context MyDbContext
EF Core删除迁移的命令是Remove-Migration。一次只删除一个迁移,并且仅删除尚未应用到数据库的最新迁移。如果强行删除已经应用到数据库的迁移,会抛出异常。
前提:已经按顺序应用了Migration1、Migration2和Migration3,想要删除Migration2和Migration3。
删除已经应用到数据库的迁移
如果你想删除已经应用到数据库的迁移,那么直接
Update-Database Migration1
即可。
执行该指令可以直接撤销2和3的更改。EF Core还会从__EFMigrationsHistory表中删除2和3的迁移记录。
然后我们再按照顺序:
Remove-Migration Migration3
Remove-Migration Migration2
为什么一定要删除?
因为你的下一次迁移一定会重新执行一遍2、3的内容,所以必须删除。
注意:不应手动删除!
Remove-Migration
在不注明参数的时候,默认是删除最后的一个迁移。
get-help Remove-Migration
查看帮助文档。
额外补充一个小问题:
当你一个数据库是SQL Server,一个数据库是SQLite的时候,
你不小心把SQLite的DbContext中UseSQLServer了,并且还初始化了一个迁移,但是没应用到数据库,
此时你想要删除迁移,使用了
Remove-Migration -Context MyDbContext
结果发现:
在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: 命名管道提供程序, error: 40 - 无法打开与 SQL Server 的连接)
这说明Remove-Migration实际上会动数据库的那张记录表。
所以,无论如何,你都不应该手动操作数据库里面专门用于迁移的那一张表。
那张表,无论如何,都应当保留,除非你的项目完结。