12

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

  1. 新开发人员需要使用种子数据从头开始创建的数据库。(该Seed()方法还应用了一些唯一索引。)
  2. 生产环境只需要应用未应用的更改。(但请记住,此数据库是在 EF 4.1 中创建的,它没有迁移。)

如何创建迁移和初始化程序(或初始化程序)以涵盖这两种情况?

4

1 回答 1

28

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

  1. 升级项目以使用带有迁移的 EF 4.3(或更高版本)并创建初始迁移以快照生产当前的样子。

    Update-Package EntityFramework
    Enable-Migrations
    Add-Migration InitialCreate  
    
  2. 用匹配的迁移代码替换您的数据库初始化程序。

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

    由于您现在可以使用 Migrations 创建独特的缺陷,因此您应该将它们添加到Up()InitialCreate 迁移的方法中。您可以CreateTable()使用该Index()方法或通过调用该CreateIndex()方法将它们链接到调用中。

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

  3. 获取一个脚本来引导您的生产环境。

    Update-Database -Script
    

    从生成的脚本中,您将想要删除几乎所有内容,因为这些表已经存在。您需要的部分是CREATE TABLE [__MigrationHistory]andINSERT INTO [__MigrationHistory]语句。

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

Once you do these things, you should be good to go with Migrations. New developers can run Update-Database to create the database from scratch, and you can run Update-Database (or use the Migrations initializer) against production to apply additional migrations there.

于 2012-05-15T20:33:52.667 回答