C# 无法使用现有数据库运行EF5迁移
首先,我阅读了以下问题/答案:C# 无法使用现有数据库运行EF5迁移,c#,.net,entity-framework-5,entity-framework-migrations,ef-database-first,C#,.net,Entity Framework 5,Entity Framework Migrations,Ef Database First,首先,我阅读了以下问题/答案: 这些似乎都是EF5之前的EF版本,我的情况似乎不符合这些答案。那么,让我描述一下我的情况 我的应用程序最初是使用EF4创建的,模型优先。我用GUI设计器设计了我的数据库,并用它来生成我的数据库 几个月来,我一直在运行数据库并收集数据。我真的不能丢失这些数据 我对代码进行了分支,用NuGet安装了EF5,并使用EF Power Tools从数据库中生成模型,方法是右键单击一个新的类库项目,然后选择Entity Framework |逆向工程代码优先 我能够
Entity Framework |逆向工程代码优先
启用迁移
。由于连接字符串和正在使用的app.config,出现了一些问题,但最终得到了它。但是,他说,这应该自动生成第一次迁移,让我达到我已经达到的程度。没有addmigrationinitialschema
,以完成步骤1中未自动完成的操作。这起作用了Add Migration AddSerialToLogEntries
,结果显示:enable migrations
命令仅在您的数据库之前已使用code First创建时才创建初始迁移,在这种情况下,数据库包含一个\u MigrationHistory
表。如果此表不存在(这种情况下,您的现有数据库以前从未使用Code First创建过)启用迁移
仅创建配置
类。您必须手动调用addmigration
,然后才能创建第一个迁移类。因此,您所看到的行为是预期的
通常,如果使用EF 5,为迁移准备现有数据库的过程如下:
- 在package manager控制台中调用
。将在项目中创建一个启用迁移
文件夹和一个Migrations
类Configuration
- 打开
类,并在构造函数中设置Configuration
(如果默认情况下尚未设置)AutomaticMigrationsEnabled=false
- 包内管理器控制台调用
“InitialSchema”只是一个示例名称。你可以随意命名。将创建一个从add-migration -IgnoreChanges InitialSchema
派生的DbMigration
类。由于\u InitialSchema
标志,此类中的-IgnoreChanges
和Up
方法为空。如果没有此标志,该类将包含一个迁移,以将整个模型添加到数据库中,这不是您想要的,因为现有数据库已经包含数据库架构Down
- 在package manager控制台中运行
。由于update database
方法为空,此更新不会对现有架构执行任何操作,只会创建Up
表(作为数据库中的系统表),并将第一条记录添加到此表中,该表包含当前EF模型的模型哈希\uu MigrationHistory
- 可选的最后一步:如果您喜欢使用自动迁移,请打开
类,并在构造函数中设置配置
。如果要继续基于代码的迁移,请保留标志AutomaticMigrationsEnabled=true
false
此时,您可以开始对模型进行更改。每次使用
add migration
创建新的迁移时,它都将基于修改前的模型,并且迁移类将只包含必要的架构更改。我建议使用稍微不同的方法,使您处于一种状态,您可以使用迁移从零开始在数据库中创建数据库发展环境:
添加迁移-IgnoreChanges InitialSchema
,
尝试使初始模式迁移的生成工作正常。
正如您所说,这应该在您最初调用时发生
启用迁移
。你可以试试p
var migrator = new DbMigrator(new Configuration());
migrator.Update();