Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么添加迁移有时会创建重复迁移?_C#_.net_Database_Entity Framework_Ef Code First - Fatal编程技术网

C# 为什么添加迁移有时会创建重复迁移?

C# 为什么添加迁移有时会创建重复迁移?,c#,.net,database,entity-framework,ef-code-first,C#,.net,Database,Entity Framework,Ef Code First,我在EntityFrameworkVersion5中遇到了一个奇怪的代码优先迁移问题。有时,更新数据库会因挂起的更改而失败,但添加迁移命令只会生成上次迁移中已包含数据库更改的迁移,并且数据库是最新的。因此,我希望新的迁移是空的 Add Migration如何检测哪些更改是到期的?它似乎没有将数据库用作源。数据库模型的快照与每次迁移一起保存在.resx文件中。添加新迁移时,EF将当前数据库模型(从DbModelBuilder的模型类和设置生成)与上次迁移进行比较,并确定它们之间的更改 如果迁移不同

我在EntityFrameworkVersion5中遇到了一个奇怪的代码优先迁移问题。有时,
更新数据库
会因挂起的更改而失败,但
添加迁移
命令只会生成上次迁移中已包含数据库更改的迁移,并且数据库是最新的。因此,我希望新的迁移是空的


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(有关详细信息:),但仍然存在这些问题。唉。