EF code首先,播种和部署 [英] EF Code first, seeding and deployment

查看:211
本文介绍了EF code首先,播种和部署的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想我们的种子与用户安装初始数据库(对于ASP.NET Web应用程序)。出于某种原因,它不能正常工作。香港专业教育学院读了大多说运行主题负载更新数据库从控制台的伟大工程,但如何做这项工作在生产环境中?

作为一种尝试绕过这个我已经结束了与以下code - 什么?我在这里丢失

的Global.asax.cs ::的Application_Start()

 尝试
{
    initializationError = NULL;
    WebSecurity.InitializeDatabaseConnection(DefaultConnection,用户配置,用户ID,用户名,autoCreateTables:真正的);
}
赶上(异常前)
{
    initializationError =前;
}//初始化数据库和种子数据
Database.SetInitializer(新EntitiesContextInitializer());//现在初始化
使用(VAR上下文=新EMUI.Models.UsersContext())
{
    如果(!context.Database.Exists())
    {
        context.Database.Initialize(真);
    }
}

EntitiesContextInitializer

 内部密封类EntitiesContextInitializer:MigrateDatabaseToLatestVersion< EMUI.Models.UsersContext,结构>
{
}

配置

 内部密封类配置:DbMigrationsConfiguration< EMUI.Models.UsersContext>
{
    公共配置()
    {
        AutomaticMigrationsEnabled = TRUE;
    }    保护覆盖无效的种子(EM.Models.UsersContext上下文)
    {
        如果(!WebSecurity.Initialized)
        {
            WebSecurity.InitializeDatabaseConnection(DefaultConnection,用户配置,用户ID,用户名,autoCreateTables:真正的);
        }        如果(!Roles.RoleExists(管理员))
        {
            Roles.CreateRole(管理员);
        }        //更多类似的播种
    }
}


解决方案

您需要做下面的步骤,使其作品:

1)让您的配置类作为一个公共的,不是内部(迁移配置)

2)本code粘贴到您的Global.asax中的Application_Start:

  //现在初始化
使用(VAR上下文=新EMUI.Models.UsersContext())
{
    如果(!context.Database.Exists())
    {
            配置配置=新配置();
            configuration.ContextType = typeof运算(EMUI.Models.UsersContext);
            VAR迁移=新DbMigrator(配置);
            migrator.Update();
    }
}

希望它帮助。

I want to seed our initial database with users (for a ASP.NET web app) on install. For some reason its not working correctly. Ive read loads of topics that mostly say run update-database which works great from the console but how does this work in a production environment?

As an attempt to circumvent this I have ended up with the following code - what am I missing here?

Global.asax.cs::Application_Start()

try
{
    initializationError = null;
    WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
}
catch (Exception ex)
{
    initializationError = ex;
}

// Initialize database and seed data
Database.SetInitializer(new EntitiesContextInitializer());

// Now initialize it
using (var context = new EMUI.Models.UsersContext())
{
    if (!context.Database.Exists())
    {
        context.Database.Initialize(true);
    }
}

EntitiesContextInitializer

internal sealed class EntitiesContextInitializer : MigrateDatabaseToLatestVersion<EMUI.Models.UsersContext, Configuration>
{
}

Configuration

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
    }
}

解决方案

You have to do the following steps to make it works:

1) make your Configuration class as a public, not internal(Configuration of migrations)

2) paste this code to your application_Start of 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();
    }
}

Hope it helps.

这篇关于EF code首先,播种和部署的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆