【问题标题】:Updating Multiple Databases MVC 5更新多个数据库 MVC 5
【发布时间】:2013-12-16 02:17:33
【问题描述】:

我有两个使用 Visual Studio 2013 的上下文。一个用于 IdentityModel,另一个用于我为主数据库创建的上下文。我遇到的问题是,每当我在包管理器控制台中运行更新数据库时,它都会在两者中创建 ApplicationDBContext DB。我的主数据库的那个永远不会被创建,因为它似乎将它视为 ApplicationDBContext。我已经尝试过 Enable-Migrations -ContextTypeName DI_MVC.Models.DIDBContext 并且它没有为 DIDBContext 类创建主数据库表。我能够在 Visual Studio 2012 中做到这一点,而在创建数据库时没有问题。不过,那是没有 ApplicationDBContext 的。对我做错的任何帮助将不胜感激。

以下是我的 2 个代码文件。我创建的普通 IdentityModel 和我的 DIDBContext 类。我还将显示 web.config 文件以及数据库连接。在 App_Data 文件夹中创建了 2 个 .mdf 文件,但两个数据库都包含成员表。

using System;
using System.Data.Entity;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.ModelConfiguration.Conventions;

namespace DI_MVC.Models
{
    public class DIDBContext : DbContext
    {
        public DIDBContext()
            : base("DIDBContext")
        {

        }

        public DbSet<DI_ConnectionStrings_CSI> CSIs { get; set; }
        public DbSet<DI_DropDownValues_DDV> DDVs { get; set; }
        public DbSet<DI_Types_DIT> DITs { get; set; }
        public DbSet<DI_FORM_DIF> DIFs { get; set; }
        public DbSet<DI_FormTabs_DFT> DFTs { get; set; }
        public DbSet<DFI_FormSections_DFS> DFSs { get; set; }
        public DbSet<DI_FormElements_DFE> DFEs { get; set; }
        public DbSet<DI_DFE_DFS_DDD> DDDs { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<DI_DFE_DFS_DDD>().HasKey(k => new { k.DDD_DFS_ID, k.DDD_DFE_ID });
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        }
    }
}


using Microsoft.AspNet.Identity.EntityFramework;
using System;
using System.Data.Entity;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.ModelConfiguration.Conventions;

namespace DI_MVC.Models
{
    // You can add profile data for the user by adding more properties to your ApplicationUser class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more.
    public class ApplicationUser : IdentityUser
    {
        public DateTime BirthDate { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }

    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public ApplicationDbContext()
            : base("DefaultConnection")
        {

        }
    }

}
<connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-DI_MVC-meohmeohmy.mdf;Initial Catalog=aspnet-DI_MVC-meohmeohmy;Integrated Security=True"
      providerName="System.Data.SqlClient" />
    <add name="DIDBContext" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-DI_MVC-MainDB.mdf;Initial Catalog=aspnet-DI_MVC-MainDB;Integrated Security=True"
      providerName="System.Data.SqlClient" />
  </connectionStrings>

【问题讨论】:

  • 还有一件事要提。无论我执行 ApplicationDbContext 还是 DIDBContext,初始迁移都有效。似乎是第二次迁移。每次我尝试强制使用新的迁移上下文类型时,它都会不断地告诉我,即使我已经运行了更新数据库,之前的迁移仍然处于挂起状态。 “无法生成显式迁移,因为以下显式迁移处于挂起状态:[201311300033115_InitialDIDBCreate]。在尝试生成新的显式迁移之前应用挂起的显式迁移。”
  • 我让它工作了,但我对如何工作不太感兴趣。我基本上只是从项目中删除了 201311300033115_InitialIDBCreate 并且不再出现错误。它运行更新没有问题。每次更新和迁移我都应用了 -ConfigurationTypeName 参数,将其设置为每个数据库上下文的特定配置类。那也不是答案。希望有人,甚至我自己,对此有更好的解决方案。

标签: asp.net-mvc database visual-studio-2013 asp.net-mvc-5


【解决方案1】:

你并不孤单。有意义的是,如果您为单个 DbContext 启用迁移,它只会更新启用迁移的 DbContext,或者至少让您指定要更新的 DbContext。然而,事实并非如此。

阅读 - thisthis

TLDR Enable-Migrations –EnableAutomaticMigrations

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    • 2014-11-22
    • 2014-04-10
    • 2020-07-14
    • 1970-01-01
    相关资源
    最近更新 更多