如何在使用Entity Framework 4.1创建的生产中的现有数据库上使用迁移?

时间:2012-05-15 14:14:51

标签: entity-framework ef-migrations

我有一个使用Entity Framework 4.1 Code First创建的生产系统。现在,我已升级到4.3并需要应用迁移,但我需要涵盖几个用例:

  1. 新开发人员需要使用种子数据从头开始创建数据库。 (Seed()方法也应用了一些唯一索引。)
  2. 生产环境仅需要应用未应用的更改。 (但请记住,此DB是在EF 4.1中创建的,它没有迁移。)
  3. 如何创建迁移和初始化程序(或初始值设定项)以涵盖这两种情况?

1 个答案:

答案 0 :(得分:28)

由于您的生产数据库是使用EF 4.1创建的,因此您需要做一些工作才能准备好与Migrations一起使用。从dev environemnt中运行的当前生产代码的副本开始。 确保dev数据库不存在。

  1. 升级项目以将EF 4.3(或更高版本)与迁移一起使用,并创建初始迁移到快照当前生产的内容。

    Update-Package EntityFramework
    Enable-Migrations
    Add-Migration InitialCreate  
    
  2. 使用匹配的迁移代码替换数据库初始值设定项。

    对于种子数据,请将其添加到Seed()文件的Migrations\Configuration.cs方法中。请注意,与初始化程序中的Seed()方法不同,此方法每次调用Update-Database时都会运行。它可能需要更新行(重置种子数据)而不是插入它们。 AddOrUpdate()方法可以为此提供帮助。

    由于现在可以使用迁移创建唯一的indecies,因此应将它们添加到InitialCreate迁移的Up()方法中。您可以使用Index()方法或通过调用CreateIndex()方法将其与CreateTable()来电链接起来。

    您现在可以使用MigrateDatabaseToLatestVersion初始化程序在初始化期间运行迁移。

  3. 获取脚本以引导您的生产环境。

    Update-Database -Script
    

    从生成的脚本中,您将要删除几乎所有内容,因为表格存在。您需要的部分是CREATE TABLE [__MigrationHistory]INSERT INTO [__MigrationHistory]声明。

  4. 可选择删除EdmMetadata表,因为不再需要它。

  5. 一旦你做了这些事情,你就应该选择迁移。新开发人员可以运行Update-Database从头开始创建数据库,您可以针对生产运行Update-Database(或使用迁移初始化程序)以在那里应用其他迁移。