【问题标题】:Switch database during setup with Entity Framework Code-First approach使用 Entity Framework Code-First 方法在设置期间切换数据库
【发布时间】:2016-02-29 06:30:09
【问题描述】:

我正在开发一个 asp.net mvc 项目。我想知道如何在应用程序设置期间(由客户端本身)使用新数据库更改/切换数据库,而无需在新数据库上手动运行迁移。

我想更改连接字符串中的数据库名称,仅此而已。我的项目应该配置并与新数据库很好地配合使用。

请提出解决方案。

【问题讨论】:

    标签: asp.net-mvc entity-framework asp.net-mvc-4 ef-code-first entity-framework-migrations


    【解决方案1】:

    您可以在配置文件中设置“MigrateDatabaseToLatestVersion”:

    internal sealed class Configuration : System.Data.Entity.MigrateDatabaseToLatestVersion<DbContext>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = false;
            //..................
        }
    
        protected override void Seed(DbContext context)
        {
            ///....
        }
    }
    

    更新:

    您可以在 global.asax 文件中设置 Database.SetInitializer:

        protected void Application_Start()
        {
          ....
          Database.SetInitializer(new MigrateDatabaseToLatestVersion<ApplicationDbContext, Configuration>());
        }
    

    【讨论】:

    • 这适用于 sql server。在 sql sever 中,我只是用新数据库替换了我的连接字符串,它在不运行迁移的情况下运行良好,但是当我使用 oracle 数据库并更改与新数据库的连接时,我必须运行所有迁移。
    【解决方案2】:

    正如 Iraj 所提到的,有一个数据库初始化程序,您可以使用它在启动期间将更改的数据库迁移设置为:

    Database.SetInitializer<ObjectContext>(
        new MigrateDatabaseToLatestVersion<ObjectContext, Configuration>());
    

    另一种方法:

    var Configuration = new DbContextConfiguration();
    Configuration.TargetDatabase = new DbConnectionInfo(
        database.ConnectionString, database.ProviderName);
    
    var MyMigrator = new DbMigrator(configuration);
    MyMigrator.Update();
    MyMigrator.GetPendingMigrations(); ' Optional
    

    您还可以创建一个设置页面,该页面可以将数据库名称(或完整的连接字符串)作为来自客户端的输入,并且您可以在客户端运行应用程序时使用它通过代码运行迁移。瞧!

    参考 - http://romiller.com/2012/02/09/running-scripting-migrations-from-code/

    [更新] 一个小技巧,您可以使用实体框架迁移功能进行开发,一旦您完成了实体和所有内容的最终确定,您就可以简单地删除迁移文件并将其从应用程序中删除并与客户端/用户共享。 然后默认情况下实体框架将创建新数据库或使用您的项目实体更新任何现有数据库。 您可以使用默认的 asp.net web api 模板进行检查。在创建新项目时,如果您选择 asp.net 身份进行身份验证,它会包含一些在第一次运行应用程序时自动创建的实体。

    【讨论】:

      猜你喜欢
      • 2012-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-14
      • 2017-10-04
      • 2014-03-07
      • 2011-08-05
      • 1970-01-01
      相关资源
      最近更新 更多