[英]Entity Framework migrations under the hood
我已经使用Entity Framework迁移了一段时间,我开始想知道它们实际上是如何工作的。 我的意思是:
EF如何理解应用程序中的模型和db方案是不同的? 据我所知,数据库中有一个表__MigrationHistory,其中存储了所有迁移以及应用程序中的Migrations文件夹(仅适用于基于代码的迁移)。 在__MigrationHistory表中,有一个名为model的列,其中包含一些有点散列。 什么是哈希? 它是模型的快照吗? 是否需要应用EF才能从之前的迁移中获取此更改?
如果它是模型快照,则意味着EF必须弄清楚每次我们决定更新数据库时如何将当前模型转换为快照。
但是,如果是更改,则意味着EF必须将这些更改应用于当前模型,以便了解db模型和应用程序模型何时不同。
问题是,在哪里可以阅读有关如何实现迁移以及数据库中此模型列的内容。 我会很感激任何建议或链接。
更新:
我检查了所提供的资源,正如我发现的那样,模型列实际上是模型的快照。 这意味着,当我运行update-database命令时,EF进入db,通过解码XML字符串检查最新的迁移模型,如果应用程序中的当前模型和从db获得的模型EF不同,则EF生成脚本来更新数据库。 但是,当有多个待迁移的迁移时,我仍然不知道EF会做什么。
我将基于https://channel9.msdn.com/Blogs/EF/Migrations-Under-the-Hood中的示例来描述示例。 比如说,我们在您的数据库中有第一次迁移,然后是第二次迁移,它添加了Url列,第三次迁移删除了此列。 如果我将这些更改应用于包含类似于First的模式的db,那么EF会添加列然后根据Second和Third删除它,还是会尝试计算更新db所需的常规更改然后执行生成的脚本(在示例中它不会执行任何操作?
另外,如果有人感兴趣,我发现还有另一个链接https://msdn.microsoft.com/en-us/data/dn481501.aspx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.