【发布时间】: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