此问题存在类似问题,但EF Core没有。与Entity Framework Core Using multiple DbContexts不重复。该问题与根本无法从第二个上下文访问数据库有关,并且这两个上下文使用不同的数据库。此问题与单个数据库有关,该问题与迁移有关
我有两个使用相同SQL Server数据库的EF核心数据库上下文。
在第一个上下文中,我有很多实体,其中一个是User。
在第二个实体中,有一个名为UserExt的实体,它具有User
的导航属性public class UserExt
{
[Key]
public long UserID { get; set; }
public virtual User User { get; set; }
[Required]
public string Address { get; set; }
}
问题是,在使用“添加迁移”为UserExt创建迁移时,还会包含第一个上下文中的所有实体。
尝试提供上下文,但结果相同
add-migration --context SecondContext
使用EF 6可以使用ContextKey(https://msdn.microsoft.com/en-us/library/system.data.entity.migrations.dbmigrationsconfiguration.contextkey(v=vs.113).aspx)解决此问题,但尚未移植到EF Core
有没有办法让这项工作成功,以便第二个上下文中的迁移只包含其实体?
答案 0 :(得分:0)
使用数据库上下文继承解决。这样,我可以进行单独的迁移。
public class SecondDbContext : FirstDbContext
{
public virtual DbSet<UserExt> ExtendedUsers { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("connectionString", options =>
options
.MigrationsAssembly("SecondDbContextAssemblyName")
.MigrationsHistoryTable("__SecondEFMigrationsHistory") // separate table to store migration history to avoid conflicts
);
}
}
由于SecondDbContext
是从FirstDbContext
继承的,因此在基本上下文中进行的每个实体更改都将被继承。这意味着将新迁移添加到第二个上下文时,它将尝试再次应用第一个上下文中的更改。解决方法是:
Add-Migration Inherit_FirstDbContext
)Up
和Down
方法中删除所有内容Update-Database
)这确保了Entity Framework快照将包含更改,而无需实际将它们重新应用到数据库中。