C# DBContext覆盖以前的迁移
我目前有两个DBContext,ApplicationDbContext和CompanyDBContext。然而,问题是,当我运行我的MVC web应用程序时,只有CompanyDBContext会反映在数据库中,而在ApplicationDbContext中所做的任何实现都不会显示在数据库中。我的两个上下文使用相同的连接字符串。ApplicationDbContext是在我创建MVC应用程序时自动生成的,因为我选择了个人帐户 当前,ApplicationDbContext如下所示C# DBContext覆盖以前的迁移,c#,entity-framework,asp.net-mvc-5,C#,Entity Framework,Asp.net Mvc 5,我目前有两个DBContext,ApplicationDbContext和CompanyDBContext。然而,问题是,当我运行我的MVC web应用程序时,只有CompanyDBContext会反映在数据库中,而在ApplicationDbContext中所做的任何实现都不会显示在数据库中。我的两个上下文使用相同的连接字符串。ApplicationDbContext是在我创建MVC应用程序时自动生成的,因为我选择了个人帐户 当前,ApplicationDbContext如下所示 publi
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DevConnection", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Ignore<CompanyDetails>();
}
}
public类ApplicationDbContext:IdentityDbContext
{
公共应用程序上下文()
:base(“DevConnection”,throwifvv1schema:false)
{
}
公共静态应用程序上下文创建()
{
返回新的ApplicationDbContext();
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
Ignore();
}
}
这是我的公司背景
public class CompanyDBContext : DbContext
{
public CompanyDBContext() : base("DevConnection")
{
}
public DbSet<CompanyDetails> companies { get; set; }
}
公共类CompanyDBContext:DbContext
{
public CompanyDBContext():基本(“DevConnection”)
{
}
公共数据库集公司{get;set;}
}
似乎一次只能更新一个dbContext。必须为每个dbContext启用迁移、添加迁移和更新数据库。我就是这样做的。但是我的dbContext
在不同的项目中,所以对您来说可能是相同的!单独更新没有覆盖我的数据库。这对我有用 我很好奇,所以我四处看了看,似乎迁移和多个DbContext
s的解决方案是使用一个DbContext
作为数据库的完整表示,通过它处理初始化和迁移,并在所有其他DbContext
类的构造函数中禁用数据库初始化
您可以通过组合使用Database.SetInitializer
和显式调用DbContext.Database.Initialize()
来源
enable-migrations -ContextTypeName MyCoolContext -MigrationsDirectory MyCoolMigrations
想想你的问题,你的数据库表/迁移没有分开 在EF6中,如果您使用多个上下文,我建议在
DbContext
派生类的OnModelCreating
方法中指定默认模式的名称(其中使用Fluent API配置)
本例将使用“Application”和“Company”作为(单个)数据库中数据库表(而不是“dbo”)的前缀。
更重要的是,它还将为\uu MigrationHistory
表添加前缀,例如应用程序。\uu MigrationHistory
和公司。\uu MigrationHistory
。
因此,在单个数据库中可以有多个\uu MigrationHistory
表,每个上下文对应一个表。
因此,您对一个上下文所做的更改不会干扰另一个上下文
添加迁移时,请在添加迁移
命令中指定配置类的完全限定名(源自DbMigrationsConfiguration
)作为参数:
add-migration NAME_OF_MIGRATION -ConfigurationTypeName FULLY_QUALIFIED_NAME_OF_CONFIGURATION_CLASS
e、 g
如果ApplicationConfiguration
是配置类的名称
在这种情况下,您可能还希望在项目中使用不同的“迁移”文件夹。您可以使用
MigrationsDirectory
属性相应地设置DbMigrationsConfiguration
派生类:
internal sealed class ApplicationConfiguration: DbMigrationsConfiguration<ApplicationDbContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
MigrationsDirectory = @"Migrations\Application";
}
}
internal sealed class CompanyConfiguration : DbMigrationsConfiguration<CompanyDBContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
MigrationsDirectory = @"Migrations\Company";
}
}
内部密封类应用程序配置:dbmigrations配置
{
公共配置()
{
AutomaticMiggerationsEnabled=假;
MigrationsDirectory=@“Migrations\Application”;
}
}
内部密封类公司配置:DBMiggerations配置
{
公共配置()
{
AutomaticMiggerationsEnabled=假;
MigrationsDirectory=@“Migrations\Company”;
}
}
感谢您的输入,我已经尝试过了,但是因为它们在同一个项目中,我无法为单个dbContext启用迁移。当我试图解释时,它说迁移已经启用。我试过输入-Force命令,但没有成功。我想我可能输入了错误的命令。明天我会试一试,如果成功的话,我会给你打勾。也许会有帮助?因此,对于每次迁移,都会有一个新的配置文件专门用于特定的上下文?你需要在单个上下文中的每个上下文中都有所有的数据库集吗?就像这一年,因为一个主上下文基本上将用作数据库定义,并且您的数据库将使用它来创建和迁移。但这难道不意味着在其他dbcontext中没有太多意义吗?抱歉,我只是想了解一种需求,因为处理迁移的上下文几乎可以做所有事情。第二个链接包括了为什么有人可能有多个上下文的动机:“以支持特定操作为目标的小模型”。如果您的应用程序很小,可能没有理由拥有多个。
add-migration NAME_OF_MIGRATION -ConfigurationTypeName ApplicationConfiguration
internal sealed class ApplicationConfiguration: DbMigrationsConfiguration<ApplicationDbContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
MigrationsDirectory = @"Migrations\Application";
}
}
internal sealed class CompanyConfiguration : DbMigrationsConfiguration<CompanyDBContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
MigrationsDirectory = @"Migrations\Company";
}
}