当我向数据库添加一个新的表以及与其他表的关系后,运行Add-Migration
命令会在Up
方法中生成代码以添加该表及其关联关系。
然而,我更喜欢在OnModelCreating
方法中使用流式API定义关系。这两种方法如何交互?例如,我可以删除Up
方法中定义关系的代码吗?
当我向数据库添加一个新的表以及与其他表的关系后,运行Add-Migration
命令会在Up
方法中生成代码以添加该表及其关联关系。
然而,我更喜欢在OnModelCreating
方法中使用流式API定义关系。这两种方法如何交互?例如,我可以删除Up
方法中定义关系的代码吗?
它们各自有完全不同的目的:
OnModelCreating
用于定义模型的内联 Fluent API。这些定义与默认约定、数据注释和配置类一起形成了模型的完整定义。那么这两者之间的关系是什么呢?迁移具有生成迁移代码(Up
和 Down
方法)所需的两个输入。其中一个输入是存储在数据库中的 __MigrationHistory
表中的最后一个迁移记录。该记录包含表示数据库的序列化模型。此输入是可选的,因为第一个迁移必须在没有它的情况下运行。第二个输入是必需的-它是您当前模型的基础,该模型通过执行当前程序集中的代码来检索=>执行Add-Migration
将执行您的OnModelCreating
以获取当前模型,并将其与从数据库检索到的模型进行比较。比较结果是显式迁移中Up
和Down
方法的内容。
Up
方法中的代码将反映在OnModelCreating
方法中设置的定义(假设您在编写流畅 API 定义之后添加了迁移)。必须不从Up
中删除这些反映的定义。 - DabblernlOnModelCreating
的ModelBuilder
将代码注入到迁移代码中的最佳方法是什么?这将是使用HasAnnotation
吗? - Shimmy Weitzhandler