如何在现有数据库上使用migration.exe执行种子步骤?

时间:2016-09-20 18:08:40

标签: entity-framework ef-code-first

我有其他人使用代码优先EF的ASP.NET应用程序,并附带了数据库迁移和种子的代码。我通常在安装新版本的应用程序之前运行migration.exe,只要我让EF从创建一个全新的数据库开始做所有事情,它就能正常运行。现在我必须使其对现有的EMPTY数据库起作用。当我运行migration.exe时,它不会返回任何错误并执行所有必需的迁移步骤,但它不再运行种子步骤(它可能假定它不需要,因为数据库已经存在)。在这种情况下,如何强制运行种子步骤?

1 个答案:

答案 0 :(得分:0)

您需要确保为数据库初始化设置的步骤,以实现您想要的目标:

CreateDatabaseIfNotExists:这是默认初始值设定项。顾名思义,如果根据配置不存在,它将创建数据库。但是,如果更改模型类然后使用此初始化程序运行应用程序,则会引发异常。

DropCreateDatabaseIfModelChanges:如果您的模型类(实体类)已更改,则此初始化程序将删除现有数据库并创建新数据库。因此,当模型类发生更改时,您不必担心维护数据库模式。

DropCreateDatabaseAlways:顾名思义,无论您的模型类是否已更改,每次运行应用程序时,此初始化程序都会删除现有数据库。当您在每次运行应用程序时都需要新数据库时,这将非常有用,就像您在开发应用程序时一样。

自定义数据库初始化程序:您也可以创建自己的自定义初始化程序,如果上述任何一项不满足您的要求,或者您想要使用上述初始化程序执行其他初始化数据库的过程。

我在开始理解Code时所遵循的最佳帮助指南是在这里编写的,并引用了您所指的部分:

http://www.entityframeworktutorial.net/code-first/database-initialization-strategy-in-code-first.aspx

重要的是要知道您可能也希望针对不同的环境使用不同的东西,并且可能希望了解如何针对不同的环境进行不同的部署。

自定义的示例如下:

public class EasyContext : DbContext
{
    public EasyContext() : base("name=EasyEntity")
    {
        Database.SetInitializer<EasyContext>(new EasyInitializer());   
    }

    public DbSet<Person> Person { get; set; }
}

您应该设置断点以确保它被捕获,否则您也可以强制启动新配置。