实体框架迁移的内部机制

4
我已经使用Entity Framework迁移一段时间了,我开始想知道它们在幕后是如何工作的。我的意思是以下内容:
EF如何理解应用程序中的模型和数据库架构不同?据我所知,数据库中有一个名为__MigrationHistory的表,其中存储了所有迁移,同时也在应用程序的Migrations文件夹中(仅适用于基于代码的迁移)。在__MigrationHistory表中,有一个名为model的列,其中包含某种哈希值。这个哈希值到底是什么?它是模型的快照吗?还是EF需要应用以从上一个迁移到当前迁移的更改?
如果它是模型快照,那就意味着每次我们决定更新数据库时,EF都必须弄清楚如何将当前模型转换为快照。
然而,如果它是更改,则意味着EF必须将这些更改应用于当前模型,以便了解数据库模型和应用程序模型何时不同。
问题是,我在哪里可以阅读关于如何实现迁移以及数据库中的这个模型列的信息。我将感激任何建议或链接。
更新:
我已经查看了提供的资源,发现模型列实际上是模型的快照。这意味着,当我运行update-database命令时,EF会去检查最新的迁移模型,通过解码XML字符串,并且如果应用程序中的当前模型与EF从数据库获取的模型不同,则EF会生成一个脚本来更新数据库。然而,我仍然不知道当有多个待处理的迁移时,EF会做什么。
我将根据https://channel9.msdn.com/Blogs/EF/Migrations-Under-the-Hood中的示例进行说明。假设我们有第一个迁移在数据库中,然后是第二个迁移,它添加了Url列,第三个迁移删除了这个列。如果我要将这些更改应用到包含类似于第一个的架构的数据库中,EF会根据第二个和第三个迁移添加并删除该列,还是尝试计算需要更新数据库的常规更改,然后执行生成的脚本(在示例情况下不执行任何操作)?

另外,如果有人感兴趣,我发现了另一个链接https://msdn.microsoft.com/en-us/data/dn481501.aspx


谢谢,稍后会去查看。看起来很有前途。 - Vlad Stryapko
1个回答

2
Channel 9视频涵盖了一般概念。此博客文章可能更具体地回答了您的问题。特别是,作者总结了模型列的使用(剧透:它是一个压缩的XML字符串,您可以解压缩并检查,有代码可供使用)。

由于评论中没有足够的字符,我更新了我的帖子。 - Vlad Stryapko
Channel 9的链接已经失效了,从微软网站上也无法访问。有人知道它去哪里了吗?我特别想找那个迁移视频。 - Marz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接