两天后,我找到了一种不在谷歌和互联网上的 EFCore 方法!
我的步骤如何运作?
当您有一个包含 10 个表的数据库并且您在 tabales 中有不想清除数据的数据时。之后您将首先在代码中创建新模型并运行到现有数据库,您将收到错误“无效的对象名称'表名'。” 用于查询新表,您想创建迁移并将其更新到现有数据库,但如果您运行 update-database,第一次迁移将为新旧表创建所有查询,您将得到“已经有一个名为 ['EntityName' ] 在数据库中。” 用于您的初始迁移。
怎么修?
- 删除数据库项目中的所有迁移和快照
- 删除现有数据库中的 __EFMigrationsHistory 表(如果存在)
- 在包管理器控制台中运行:
运行前注意:此代码将在 Data 文件夹中创建现有数据库的新上下文和模型,因此不要忘记检查您的项目中是否有 Data 文件夹。
Scaffold-DbContext “你的连接字符串” Microsoft.EntityFrameworkCore.SqlServer -OutputDir 数据
- 在包管理器控制台中运行:
运行前注意:使用 Data 文件夹上下文为初始数据库创建第一个迁移(OldDataBaseContext 位于步骤 2 创建的 Data 文件夹内)
添加迁移初始 -Context OldDataBaseContext
- 删除步骤 3 中创建的初始迁移中 Up 方法中的所有代码
- 在包管理器控制台中运行:
运行前注意:使用 Data 文件夹上下文更新数据库(OldDataBaseContext 位于步骤 2 创建的 Data 文件夹内)
更新数据库-上下文 OldDataBaseContext
- 删除在步骤 2 中创建的数据文件夹
- 转到快照和初始迁移类,并将已删除的上下文从 Data 文件夹更改为数据库项目中存在的主上下文(只需修复它以进行构建)
- 跑:
运行前注意:为具有新数据库更改的主上下文添加迁移
添加迁移新更新
- 跑:
更新数据库
我希望这对某人有所帮助。