[英]DBContext overwrites previous migration
我目前有两个DbContext,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; }
}
如果不需要迁移,我将删除您现在拥有的迁移,然后使用下面的命令通过指定其名称和目录来分别启用它们,因此将分别创建它们。
enable-migrations -ContextTypeName MyCoolContext -MigrationsDirectory MyCoolMigrations
http://www.mortenanderson.net/code-first-migrations-for-entity-framework
似乎一次只能更新一个dbContext。 您必须为每个dbContext Enable-Migration
, Add-Migration
和Update-Database
。 这就是我做到的方式。 但是我的dbContext
位于不同的项目中,所以可能对您来说可以一样! 单独进行更新并不会覆盖我的数据库。 这个对我有用 !
我很好奇,所以环顾四周,看来迁移和多个DbContext
的解决方案是拥有一个DbContext
,它可以作为数据库的完整表示,通过该数据库可以处理初始化和迁移,并在数据库中禁用数据库初始化。所有其他DbContext
类的构造函数。
您可以通过结合Database.SetInitializer
和对DbContext.Database.Initialize()
的显式调用来DbContext.Database.Initialize()
来源
考虑到您遇到的问题是数据库表/迁移没有分开。
在EF6中,如果您使用多个上下文,则建议在DbContext
派生类(Fluent-API配置所在的位置)的OnModelCreating
方法中指定默认模式的名称。
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
}
}
本示例将使用“应用程序”和“公司”作为您(单个)数据库中数据库表(而不是“ dbo”)的前缀。 更重要的是,它还将在__MigrationHistory
表之前__MigrationHistory
前缀,例如Application.__MigrationHistory
和Company.__MigrationHistory
。 因此,在一个数据库中可以有多个__MigrationHistory
表,每个表一个。 因此,您对一个上下文所做的更改不会与另一个上下文混淆。
添加迁移时,请在add-migration
命令中指定配置类的全限定名称(从DbMigrationsConfiguration
派生)作为参数:
add-migration NAME_OF_MIGRATION -ConfigurationTypeName FULLY_QUALIFIED_NAME_OF_CONFIGURATION_CLASS
例如
add-migration NAME_OF_MIGRATION -ConfigurationTypeName ApplicationConfiguration
如果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";
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.