Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DBContext覆盖以前的迁移_C#_Entity Framework_Asp.net Mvc 5 - Fatal编程技术网

C# DBContext覆盖以前的迁移

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

我目前有两个DBContext,ApplicationDbContext和CompanyDBContext。然而,问题是,当我运行我的MVC web应用程序时,只有CompanyDBContext会反映在数据库中,而在ApplicationDbContext中所做的任何实现都不会显示在数据库中。我的两个上下文使用相同的连接字符串。ApplicationDbContext是在我创建MVC应用程序时自动生成的,因为我选择了个人帐户

当前,ApplicationDbContext如下所示

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