根据Microsoft documentation,您有两种方法可以在EF中为基于代码的迁移添加初始迁移:
使用exinsting数据库(Add-Migration InitialCreate –IgnoreChanges
)。
如果将来应用迁移的其他数据库与本地数据库当前具有相同的模式,则应使用此方法。
使用空数据库(Add-Migration InitialCreate
)。
如果将来应用迁移的其他数据库为空(或者尚不存在),则应使用此方法。
我们正在尝试将表单自动迁移切换到基于代码的迁移,我们需要让两个选项都发生,因为(1.)我们已经安装了一个应用程序并在客户位置运行,并且(2.)我们想要安装更多应用程序。
我们如何实现这一目标?
我有两个想法如何实现这一点,但不知道我可能遇到的副作用或麻烦。
Up()
检查是否已存在表和字段以跳过现有迁移。 附注:我们使用现有的数据库方法(1.)成功迁移已安装的应用程序,如another post中所示。显然,新装置不能那样工作。
答案 0 :(得分:1)
如果您已使用现有数据库方法成功迁移已安装的应用程序,那么该数据库将在__MigrationHistory
表中有一个条目,其migrationid
与初始迁移的文件名相匹配,并且您现在放在Up
方法中的任何代码都不会运行。
不幸的是,您无法强制重新构建新应用程序的初始迁移,所以我会这样做:
Add-Migration InitialCreate
支持创建数据库所需的代码Up
方法中注释掉代码,或者只在顶部添加return
以阻止其执行。Up
方法中的代码,以便为将来的新应用程序执行