我有一个使用Entity Framework 4.1 Code First创建的生产系统。现在,我已升级到4.3并需要应用迁移,但我需要涵盖几个用例:
Seed()
方法也应用了一些唯一索引。)如何创建迁移和初始化程序(或初始值设定项)以涵盖这两种情况?
答案 0 :(得分:28)
由于您的生产数据库是使用EF 4.1创建的,因此您需要做一些工作才能准备好与Migrations一起使用。从dev environemnt中运行的当前生产代码的副本开始。 确保dev数据库不存在。
升级项目以将EF 4.3(或更高版本)与迁移一起使用,并创建初始迁移到快照当前生产的内容。
Update-Package EntityFramework
Enable-Migrations
Add-Migration InitialCreate
使用匹配的迁移代码替换数据库初始值设定项。
对于种子数据,请将其添加到Seed()
文件的Migrations\Configuration.cs
方法中。请注意,与初始化程序中的Seed()
方法不同,此方法每次调用Update-Database
时都会运行。它可能需要更新行(重置种子数据)而不是插入它们。 AddOrUpdate()
方法可以为此提供帮助。
由于现在可以使用迁移创建唯一的indecies,因此应将它们添加到InitialCreate迁移的Up()
方法中。您可以使用Index()
方法或通过调用CreateIndex()
方法将其与CreateTable()
来电链接起来。
您现在可以使用MigrateDatabaseToLatestVersion初始化程序在初始化期间运行迁移。
获取脚本以引导您的生产环境。
Update-Database -Script
从生成的脚本中,您将要删除几乎所有内容,因为表格存在。您需要的部分是CREATE TABLE [__MigrationHistory]
和INSERT INTO [__MigrationHistory]
声明。
可选择删除EdmMetadata
表,因为不再需要它。
一旦你做了这些事情,你就应该选择迁移。新开发人员可以运行Update-Database
从头开始创建数据库,您可以针对生产运行Update-Database
(或使用迁移初始化程序)以在那里应用其他迁移。