在处理多个数据库上下文时,我遇到代码优先迁移的困难,希望有人有解决方案 .
这是解决方案的方式:
-
APIProject
-
IdentityServer4Project
-
SharedEntitiesProject
APIProject包含继承DbContext的APIProjectDbContext
public class APIProjectDbContext : DbContext
{
public APIProjectDbContext (DbContextOptions<APIProjectDbContext > options)
: base(options)
{ }
// setting entities from SharedEntitiesProject
public DbSet<Car> Cars { get; set; }
Public DbSet<DrivingRoute> DrivingRoute { get; set; }
}
IdentityServer4Project包含ApplicationDbContext:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options) {
}
protected override void OnModelCreating(ModelBuilder builder) {
base.OnModelCreating(builder);
}
}
当我对APIProject运行Add-Migration InitialAPI时,一切正常 . 但是,当我针对IdentityServer4Project运行Add-Migration InitialIS4时,它会创建所有Asp核心标识表以及已由InitialAPI迁移获取的表 .
因此,如果我尝试运行InitialAPI然后InitialIS4迁移它会抛出错误,因为表已经存在 .
当我需要将IdentityUser扩展到ApplicationUser以在下面的Car实体和ApplicationUser实体示例之间创建关系时,这就成了一个问题 .
public class Car {
public int Id {get;set;}
public string Type {get;set;}
public DateTime CarBought {get;set;}
public ICollection<ApplicationUser> Drivers {get;set;}
}
public class ApplicationUser : IdentityUser {
public Car Car {get;set;}
}
如果我没有针对ApplicationDbContext添加新迁移,那么当webapp加载时,它会告诉我有待迁移 . 如果我确实为ApplicationDbContext添加了一个新的迁移,它会复制从APIProject的迁移(即使我没有指定要创建的表等) .
任何建议我如何管理这些,以便当我创建新的迁移时,它不是重复,而是更新更改?
所有项目都是Net Core 2.0