假设我是一家公司的新开发人员。因此,该项目已经有一个现有的数据库。为了处理该项目,显然我需要搭建现有数据库(数据库优先方法)的脚手架,它可以生成模型类供我处理。
所以我开始处理项目,并希望向表添加一个新列,所以我在模型类上添加一个新属性,然后我想在数据库中应用此更改。因此,我通过添加新迁移并更新数据库来切换回代码优先方法。
但问题是,如果我添加新的迁移,EF 将在迁移的 UP 方法中包含所有数据模型类,以在数据库中创建所有相应的表,因为 EF 认为所有模型类都是我新添加的。那么,如何仅通过添加新列来更新表而不重新创建所有其他表呢?
1) 对现有数据库中的模型和数据库上下文进行逆向工程。点击此链接,https://learn.microsoft.com/en-us/ef/core/get-started/aspnetcore/existing-db
2) 现在您有了模型和数据库上下文。您的数据访问应该适用于新上下文,但迁移除外。
3) 现在您已经创建了数据库和表,您需要调整数据库以假装当前模式是使用迁移创建的。
3.1)首先创建初始迁移Add-Migration IntitialCreate
。它将具有创建数据库的代码,直到当前级别。
3.2)现在,您应该手动创建__MigrationHistory表并手动将IntialMigration插入表中,这样它就不会再次尝试应用它。如果您发现很难手动执行此操作,则有技巧。
使用当前迁移创建新数据库,只需更改连接字符串中的数据库名称并执行update-database
即可。在创建的新数据库中__MigrationHistory应创建表,并已应用 InitialCreate 迁移。生成一个创建脚本以及数据,并在原始数据库中执行该脚本。
4)现在,您可以对模型进行其余更改,创建新迁移并像往常一样应用它们。