假设我是一家公司的新开发人员。所以该项目已经有一个现有的数据库。为了处理这个项目,显然我需要搭建现有的数据库(数据库优先方法),它可以生成模型类供我处理。
因此,我开始处理该项目,并希望向表中添加一个新列,因此我在模型类上添加一个新属性,然后我想在数据库中应用此更改。因此,我通过添加新的迁移并更新数据库切换回代码优先方法。
但问题是,如果我添加一个新的迁移,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
。在创建的新数据库中,应使用已应用的 InitialCreate 迁移来创建 __MigrationHistory 表。生成创建脚本和数据并在原始数据库中执行该脚本。
4) 现在您可以对模型进行其余的更改,创建新的迁移并照常应用它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)