在处理多个数据库上下文时,我遇到代码优先迁移的困难,希望有人有解决方案 .

这是解决方案的方式:

  • 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