我有其他人使用代码优先EF的ASP.NET应用程序,并附带了数据库迁移和种子的代码。我通常在安装新版本的应用程序之前运行migration.exe,只要我让EF从创建一个全新的数据库开始做所有事情,它就能正常运行。现在我必须使其对现有的EMPTY数据库起作用。当我运行migration.exe时,它不会返回任何错误并执行所有必需的迁移步骤,但它不再运行种子步骤(它可能假定它不需要,因为数据库已经存在)。在这种情况下,如何强制运行种子步骤?
答案 0 :(得分:0)
您需要确保为数据库初始化设置的步骤,以实现您想要的目标:
CreateDatabaseIfNotExists:这是默认初始值设定项。顾名思义,如果根据配置不存在,它将创建数据库。但是,如果更改模型类然后使用此初始化程序运行应用程序,则会引发异常。
DropCreateDatabaseIfModelChanges:如果您的模型类(实体类)已更改,则此初始化程序将删除现有数据库并创建新数据库。因此,当模型类发生更改时,您不必担心维护数据库模式。
DropCreateDatabaseAlways:顾名思义,无论您的模型类是否已更改,每次运行应用程序时,此初始化程序都会删除现有数据库。当您在每次运行应用程序时都需要新数据库时,这将非常有用,就像您在开发应用程序时一样。
自定义数据库初始化程序:您也可以创建自己的自定义初始化程序,如果上述任何一项不满足您的要求,或者您想要使用上述初始化程序执行其他初始化数据库的过程。
我在开始理解Code时所遵循的最佳帮助指南是在这里编写的,并引用了您所指的部分:
重要的是要知道您可能也希望针对不同的环境使用不同的东西,并且可能希望了解如何针对不同的环境进行不同的部署。
自定义的示例如下:
public class EasyContext : DbContext
{
public EasyContext() : base("name=EasyEntity")
{
Database.SetInitializer<EasyContext>(new EasyInitializer());
}
public DbSet<Person> Person { get; set; }
}
您应该设置断点以确保它被捕获,否则您也可以强制启动新配置。