繁体   English   中英

实体框架迁移引擎盖下

[英]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

第9频道视频涵盖了一般概念。 博客文章可能更具体针对您的问题。 特别是,作者总结了模型列的使用(剧透:它是一个压缩的XML字符串,你可以解压缩和检查,有代码可以这样做)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM