C# EF代码优先,种子设定和部署

C# EF代码优先,种子设定和部署,c#,asp.net,entity-framework,ef-code-first,C#,Asp.net,Entity Framework,Ef Code First,我想在安装时为我们的初始数据库添加用户种子(对于ASP.NET web应用程序)。由于某种原因,它不能正常工作。我读了大量的主题,主要是说运行更新数据库,这在控制台上非常有效,但是在生产环境中如何工作呢 为了避免这种情况,我最终得到了以下代码——我在这里遗漏了什么 Global.asax.cs::Application\u Start() EntitiesContextInitializer internal sealed class EntitiesContextInitializer : M

我想在安装时为我们的初始数据库添加用户种子(对于ASP.NET web应用程序)。由于某种原因,它不能正常工作。我读了大量的主题,主要是说运行
更新数据库
,这在控制台上非常有效,但是在生产环境中如何工作呢

为了避免这种情况,我最终得到了以下代码——我在这里遗漏了什么

Global.asax.cs::Application\u Start()

EntitiesContextInitializer

internal sealed class EntitiesContextInitializer : MigrateDatabaseToLatestVersion<EMUI.Models.UsersContext, Configuration>
{
}
内部密封类EntitiesContextInitializer:MigrateDatabaseToLatestVersion
{
}
配置

internal sealed class Configuration : DbMigrationsConfiguration<EMUI.Models.UsersContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = true;
    }

    protected override void Seed(EM.Models.UsersContext context)
    {
        if (!WebSecurity.Initialized)
        {
            WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
        }

        if (!Roles.RoleExists("Administrator"))
        {
            Roles.CreateRole("Administrator");
        }

        // More similar seeding
    }
}
内部密封类配置:dbmigtorinsconfiguration
{
公共配置()
{
AutomaticMiggerationsEnabled=真;
}
受保护的覆盖无效种子(EM.Models.UsersContext上下文)
{
如果(!WebSecurity.Initialized)
{
WebSecurity.InitializeDatabaseConnection(“DefaultConnection”、“UserProfile”、“UserId”、“UserName”,autoCreateTables:true);
}
如果(!Roles.RoleExists(“管理员”))
{
角色。创建角色(“管理员”);
}
//更相似的播种
}
}

您必须执行以下步骤才能使其正常工作:

1) 将您的配置类设置为公共类,而不是内部类(迁移配置)

2) 将此代码粘贴到您的应用程序\u global.asax的开头:

// Now initialize it
using (var context = new EMUI.Models.UsersContext())
{
    if (!context.Database.Exists())
    {
            Configuration configuration = new Configuration();
            configuration.ContextType = typeof(EMUI.Models.UsersContext);
            var migrator = new DbMigrator(configuration);
            migrator.Update();
    }
}
希望能有帮助

// Now initialize it
using (var context = new EMUI.Models.UsersContext())
{
    if (!context.Database.Exists())
    {
            Configuration configuration = new Configuration();
            configuration.ContextType = typeof(EMUI.Models.UsersContext);
            var migrator = new DbMigrator(configuration);
            migrator.Update();
    }
}