简而言之,我想做的是将迁移功能添加到成熟的项目中,并且总是使用sql手动处理更改。
已为我分配了一个使用Entity Framework的项目,但是所有数据库更改都是在不使用迁移的情况下手动完成的。
在引入新更改之前,我们将在代码中创建模型,使用新表更新上下文,然后使用Entity Framework PowerTools生成sql,然后手动更新数据库。
因此,今天我们有了一个完整的数据库,有了一个数据库上下文,以及精心制作的EntityTypeConfiguration类。因此,这是代码优先的情况,但是数据库已经存在。
挑战是我跑步
let route = this.router.config.find(r => r.path === '/erro');
route.data = {name: 'name' };
this.router.navigateByUrl('/error')
我陷入了一个完整的Up()函数中,该函数试图创建整个数据库
'Enable-Migrations'
'Add-Migration'
我想做的是在数据库中设置一个标志,指示当前状态为现状,并且仅当创建全新数据库时才使用当前的Up()函数。
之后,我希望对数据库的所有更改都可以由EF迁移处理。
这可能吗?以及如何?
预先感谢
答案 0 :(得分:3)
选项1:创建从当前模型开始的迁移
您可以将–IgnoreChanges
参数与Add-Migration
命令一起使用:
Add-Migration MigrationName –IgnoreChanges
这将使用当前模型作为快照创建一个空迁移。
选项2:创建完全迁移,从头开始创建数据库,但是跳过某些数据库上的第一次迁移
实体框架使用__MigrationHistory
表来跟踪已经执行的迁移。在数据库上执行第一次迁移时,它将被插入__MigrationHistory
表中。下次调用Update-Database
命令时,EF将查看__MigrationHistory
表,并跳过已经应用于数据库的迁移。
要使特定数据库跳过第一次迁移,可以执行以下操作:
Enable-Migrations
Add-Migration InitialCreate
Update-Database -Script
CREATE TABLE [__MigrationHistory]
INSERT INTO [__MigrationHistory] ...
并在数据库上执行这些语句。
现在,该数据库具有已应用InitialCreate
迁移的信息,并且对该特定数据库进行的Update-Database
的任何进一步调用都将跳过InitialCreate
迁移。