C# 为什么添加迁移有时会创建重复迁移?
我在EntityFrameworkVersion5中遇到了一个奇怪的代码优先迁移问题。有时,C# 为什么添加迁移有时会创建重复迁移?,c#,.net,database,entity-framework,ef-code-first,C#,.net,Database,Entity Framework,Ef Code First,我在EntityFrameworkVersion5中遇到了一个奇怪的代码优先迁移问题。有时,更新数据库会因挂起的更改而失败,但添加迁移命令只会生成上次迁移中已包含数据库更改的迁移,并且数据库是最新的。因此,我希望新的迁移是空的 Add Migration如何检测哪些更改是到期的?它似乎没有将数据库用作源。数据库模型的快照与每次迁移一起保存在.resx文件中。添加新迁移时,EF将当前数据库模型(从DbModelBuilder的模型类和设置生成)与上次迁移进行比较,并确定它们之间的更改 如果迁移不同
更新数据库
会因挂起的更改而失败,但添加迁移
命令只会生成上次迁移中已包含数据库更改的迁移,并且数据库是最新的。因此,我希望新的迁移是空的
Add Migration
如何检测哪些更改是到期的?它似乎没有将数据库用作源。数据库模型的快照与每次迁移一起保存在.resx文件中。添加新迁移时,EF将当前数据库模型(从DbModelBuilder的模型类和设置生成)与上次迁移进行比较,并确定它们之间的更改
如果迁移不同步,则可能会出现您描述的问题。如果两个开发人员进行了两次独立的迁移,并且这些迁移后来被合并回默认分支,我们就会遇到这种情况
例如:
开发者1
迁移添加列
开发者2
迁移地址栏B
合并版本
迁移AddColumnA-数据库快照包括columnA
迁移AddColumnB-数据库快照包括columnB,但不包括
圆柱
如果添加另一个迁移,则会根据迁移AddColumnB确定更改,该迁移不包含有关columnA的信息。此问题的一个解决方法是生成虚拟迁移(使用空的Up和Down方法),以便在上次迁移中获得正确的数据库模型快照
合并版本
迁移AddColumnA-数据库快照包括columnA
迁移AddColumnB-数据库快照包括columnB,但不包括
圆柱
迁移虚拟-具有columnA和columnB的数据库快照
非常有趣。有没有办法防止迁移是基于该资源文件创建的,从而将数据库用作引用?在我看来,这是迁移的一个严重缺点,因为我确实希望有显式的迁移文件,而不仅仅是自动迁移,但不希望在同一个代码库上使用多个dev时有大量的虚拟迁移文件。IMHO没有办法将数据库指定为引用。您可以更新到第一次迁移(AddColumnA),然后重新生成第二次迁移,而不是创建虚拟迁移。“向上”和“向下”方法将保持不变,但数据库快照将更新为正确的版本,不需要进行虚拟迁移。感谢提供所有信息,但在每次合并的修订之间切换要比使用“丑陋的”/“空的合并迁移文件”麻烦得多。至少如果您每天进行一次或多次合并。您将需要在4年后添加合并迁移添加迁移合并–IgnoreChanges(有关详细信息:),但仍然存在这些问题。唉。