【问题标题】:ASP.NET Entity Framework Code First MigrarionASP.NET 实体框架代码优先迁移
【发布时间】:2014-11-04 09:22:27
【问题描述】:

这是一个带有 Entity Framework 6.1 Code First 应用程序的 ASP.NET MVC。

如果数据库不存在,我需要我的应用程序来创建数据库,并使用一些数据为表提供种子。如果模型已使用 MigrateDatabaseToLatestVersion 更改,我还需要在应用程序启动时迁移数据库。

在 Application_Start 我有:

protected void Application_Start()
{
    Database.SetInitializer(new MyAppDataInitializer());
    Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyAppDataContext, MyApp.Model.Migrations.Configuration>());
}

初始化器:

public class MyAppDataInitializer: CreateDatabaseIfNotExists<MyAppDataContext>
{
    protected override void Seed(MyAppDataContext context)
    {
        Code to add some "CREATION DATA"
    }
}

这里是迁移配置类:

    public class Configuration : DbMigrationsConfiguration<MyApp.Model.DataContext.MyAppDataContext>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = true;
            AutomaticMigrationDataLossAllowed = true;
            ContextKey = "MyApp.Model.DataContext.MyAppDataContext";
        }

        protected override void Seed(MyApp.Model.DataContext.MyAppDataContext context)
        {
            Code to add some "MIGRATION DATA"
        }
    }

当我的应用程序启动时,它会按预期工作,除了一件事:

  • 如果数据库存在,它会完美运行,它会根据新模型更改数据库,并使用“迁移数据”为数据库播种。

  • 如果数据库不存在,它会创建数据库,但它只会使用“迁移数据”而不是“创建数据”为数据库播种。初始化器上的 SEED 方法没有被调用。

我确定我在这里做错了什么,但我不知道如何在数据库不存在时创建数据库并播种一些仅插入第一个的“init”数据时间。

然后在更改模型时,它只更改数据库并添加我在迁移种子方法中设置的数据,以备不时之需。

你能帮我解决这个问题吗?

提前致谢。

【问题讨论】:

    标签: asp.net-mvc entity-framework-6 entity-framework-migrations


    【解决方案1】:

    您正在覆盖初始化程序。这是一个“set”而不是“add”初始化器,并且只能有一个..

    protected void Application_Start()
    {
        Database.SetInitializer(new MyAppDataInitializer());
        // Now the initializer gets "re-set" again and MyAppDataInitializer is not used at all
        Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyAppDataContext, MyApp.Model.Migrations.Configuration>());
    }
    

    【讨论】:

    • 我明白了,谢谢。那么我怎么能做我想做的事呢?我可以询问数据库是否存在于某处,如果它不存在,则在创建它之后插入创建数据?或者有一个类似 on database created 的事件?
    猜你喜欢
    • 2013-12-29
    • 2017-10-31
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    相关资源
    最近更新 更多