我目前有两个DbContexts,ApplicationDbContext和CompanyDBContext。但问题是,当我运行我的MVC Web应用程序时,只有CompanyDBContext会反映在数据库上,而且我看不到ApplicationDbContext中的任何实现都显示在数据库中。我的两个上下文都使用相同的连接字符串。我创建MVC应用程序时自动生成ApplicationDbContext,因为我选择了个人帐户
目前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>();
}
}
这是我的CompanyDbContext
public class CompanyDBContext : DbContext
{
public CompanyDBContext() : base("DevConnection")
{
}
public DbSet<CompanyDetails> companies { get; set; }
}
答案 0 :(得分:2)
如果您不需要它们,我会删除您现在的迁移,然后使用下面的命令通过指定它们的名称和目录来单独启用它们,因此它们是单独创建的。
enable-migrations -ContextTypeName MyCoolContext -MigrationsDirectory MyCoolMigrations
http://www.mortenanderson.net/code-first-migrations-for-entity-framework
答案 1 :(得分:1)
似乎只有一个dbContext可以立即更新。每个dbContext都必须Enable-Migration
,Add-Migration
和Update-Database
。这就是我这样做的方式。但是我的dbContext
处于不同的项目中,所以可能对你来说也是一样的!单独更新并没有覆盖我的数据库。它对我有用!
答案 2 :(得分:1)
我很好奇,所以我环顾四周,似乎迁移和多个DbContext
的解决方案是使用单个DbContext
作为数据库的完整表示,通过该数据库进行初始化处理迁移,并在所有其他DbContext
类的构造函数中禁用数据库初始化。
您可以通过Database.SetInitializer
和明确调用DbContext.Database.Initialize()
<强>来源强>
答案 3 :(得分:0)
在思考您遇到的问题时,您的数据库表/迁移不会分开。
在EF6中,如果您使用多个上下文,我建议您在OnModelCreating
派生类的DbContext
方法中指定默认架构的名称(Fluent-API配置所在的位置)
public partial class ApplicationDbContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("Application");
// Fluent API configuration
}
}
public partial class CompanyDBContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("Company");
// Fluent API configuration
}
}
此示例将使用&#34; Application&#34;和&#34;公司&#34;作为您的(单个)数据库中数据库表(而不是&#34; dbo&#34;)的前缀。
更重要的是,它还会在__MigrationHistory
表格前加上前缀,例如Application.__MigrationHistory
和Company.__MigrationHistory
。
因此,您可以在一个数据库中拥有多个__MigrationHistory
表,每个上下文一个。
因此,您为一个上下文所做的更改不会与另一个上下文混淆。
添加迁移时,请在DbMigrationsConfiguration
命令中将参数类的完全限定名称(源自add-migration
)指定为参数:
add-migration NAME_OF_MIGRATION -ConfigurationTypeName FULLY_QUALIFIED_NAME_OF_CONFIGURATION_CLASS
e.g。
add-migration NAME_OF_MIGRATION -ConfigurationTypeName ApplicationConfiguration
如果ApplicationConfiguration
是配置类的名称。
在这种情况下,您可能还希望使用不同的&#34;迁移&#34;你项目中的文件夹。您可以使用DbMigrationsConfiguration
属性相应地设置MigrationsDirectory
派生类:
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";
}
}