2

我有2个DbContexts:ASP.NET核心多的DbContext不能添加迁移

services.AddDbContext<ConfigDbContext>(options => options.UseSqlServer(Configuration["Data:ConfigSQLServer:ConnectionString"].ToString(), t => t.MigrationsAssembly("App.Web"))); 

services.AddDbContext<AppDbContext>(options => options.UseSqlServer(Configuration["Data:AppSQLServer:ConnectionString"].ToString(), t => t.MigrationsAssembly("App.Web"))); 

,当我尝试运行

dotnet ef migrations add Initial -c AppDbContext 

我得到:

No DbContext named 'AppDbContext' was found 

如果我运行:

dotnet ef dbcontext list 

结果是:

FullNamespace.ConfigDbContext 

它不缝找到第二的DbContext AppDbContext

ConfigDbCOntext:

public class ConfigDbContext : DbContext 
{ 
    public ConfigDbContext() 
    { 

    } 

    public ConfigDbContext(DbContextOptions<ConfigDbContext> options) : base(options) 
    { 

    } 

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 
    } 
} 

AppDbContext:

public class AppDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, Guid> 
{ 
    public AppDbContext() 
    { 

    } 

    public ConfigDbContext(DbContextOptions<AppDbContext> options) : base(options) 
    { 

    } 

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 
    } 
} 

回答

0

也许你缺少UserSql选项? 喜欢:

services.AddDbContext<ApplicationDbContext>(options => 
      options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); 

也 - 你能分享你的AppDbContext实现?

+0

我做一个编辑对我的问题 – user2818430

+0

废话...如果你切换周围的秩序,它只能找到的第一个? – JanivZ

0

我有类似的设置,除了我的DbContext和我的IdentityDbCotenxt生活在不同的程序集以外的Web项目。

ConfigDbContext

// Remove the parameter-less constructor 

public class ConfigDbContext : DbContext 
{ 
    public ConfigDbContext(DbContextOptions<ConfigDbContext> options) : base(options) 
    { } 

    rotected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 
    } 
} 

AppDbContext

// Remove the parameter-less constructor 
// Rename the constructor to AppDbContext, instead of ConfigDbContext 

public class AppDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, Guid> 
{ 
    public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) 
    { } 

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 
    } 
} 
我IdentityDbContext

另外,如果你改变了主键Guid,我要重写AppUserClaimAppUserRoleAppUserLoginAppRoleClaimAppUserToken为好。

我IdentityDbContext

public class AppIdentityDbContext : IdentityDbContext<AppUser, AppRole, Guid, AppUserClaim, AppUserRole, 
    AppUserLogin, AppRoleClaim, AppUserToken> 
{ 
    public AppIdentityDbContext(DbContextOptions<AppIdentityDbContext> options) 
     : base(options) 
    { 
    } 

    protected override void OnModelCreating(ModelBuilder builder) 
    { 
     base.OnModelCreating(builder); 

     builder.Entity<AppUser>().ToTable("User"); 
     builder.Entity<AppRole>().ToTable("Role"); 
     builder.Entity<AppUserRole>().ToTable("UserRole"); 

     builder.Entity<AppUserClaim>().ToTable("UserClaim"); 
     builder.Entity<AppRoleClaim>().ToTable("RoleClaim"); 

     builder.Entity<AppUserLogin>().ToTable("UserLogin"); 
     builder.Entity<AppUserToken>().ToTable("UserToken"); 
    } 
} 

我不认为这是问题,但如果从一开始我的建议不解决这个问题,可能给这一审判的例子。

0

AppDbContext应该是:

public class AppDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, Guid> 
{ 
    public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) 
    { 

    } 

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 
    } 
}