OnModelCreating和非自动迁移之间的关系是什么?

10

当我向数据库添加一个新的表以及与其他表的关系后,运行Add-Migration命令会在Up方法中生成代码以添加该表及其关联关系。 然而,我更喜欢在OnModelCreating方法中使用流式API定义关系。这两种方法如何交互?例如,我可以删除Up方法中定义关系的代码吗?

1个回答

16

它们各自有完全不同的目的:

  • OnModelCreating 用于定义模型的内联 Fluent API。这些定义与默认约定、数据注释和配置类一起形成了模型的完整定义。
  • 显式迁移定义了必须执行的操作,以将数据库迁移到当前模型所需的形式。

那么这两者之间的关系是什么呢?迁移具有生成迁移代码(UpDown 方法)所需的两个输入。其中一个输入是存储在数据库中的 __MigrationHistory 表中的最后一个迁移记录。该记录包含表示数据库的序列化模型。此输入是可选的,因为第一个迁移必须在没有它的情况下运行。第二个输入是必需的-它是您当前模型的基础,该模型通过执行当前程序集中的代码来检索=>执行Add-Migration 将执行您的OnModelCreating 以获取当前模型,并将其与从数据库检索到的模型进行比较。比较结果是显式迁移中UpDown方法的内容。


3
谢谢!如果我理解正确的话,Up 方法中的代码将反映在 OnModelCreating 方法中设置的定义(假设您在编写流畅 API 定义之后添加了迁移)。必须Up 中删除这些反映的定义。 - Dabblernl
使用 OnModelCreatingModelBuilder 将代码注入到迁移代码中的最佳方法是什么?这将是使用 HasAnnotation 吗? - Shimmy Weitzhandler

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