我已经使用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
答案 0 :(得分:2)
这个Channel 9 video涵盖了一般概念。此blog post可能更具体针对您的问题。特别是,作者总结了模型列的使用(剧透:它是一个压缩的XML字符串,你可以解压缩和检查,有代码可以这样做)。