ASP.NET核心多的DbContext不能添加迁移
问题描述:
我有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);
}
}
答
也许你缺少UserSql选项? 喜欢:
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
也 - 你能分享你的AppDbContext实现?
答
我有类似的设置,除了我的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
,我要重写AppUserClaim
,AppUserRole
,AppUserLogin
,AppRoleClaim
和AppUserToken
为好。
我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");
}
}
我不认为这是问题,但如果从一开始我的建议不解决这个问题,可能给这一审判的例子。
答
AppDbContext应该是:
public class AppDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, Guid>
{
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
}
我做一个编辑对我的问题 – user2818430
废话...如果你切换周围的秩序,它只能找到的第一个? – JanivZ