【问题标题】:ASP.NET Core multiple dbcontext cannot add migrationASP.NET Core 多个 dbcontext 无法添加迁移
【发布时间】:2018-03-24 10:23:14
【问题描述】:

我有 2 个 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

配置数据库上下文:

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);
    }
}

【问题讨论】:

    标签: c# asp.net-core entity-framework-core asp.net-core-2.0 ef-core-2.0


    【解决方案1】:

    我有类似的设置,除了我的 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");
        }
    }
    

    我认为这不是问题,但如果我从一开始的建议不能解决问题,可以尝试一下。

    【讨论】:

      【解决方案2】:

      AppDbContext 应该是:

      public class AppDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, Guid>
      {
          public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
          {
      
          }
      
          protected override void OnModelCreating(ModelBuilder modelBuilder)
          {
              base.OnModelCreating(modelBuilder);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-03
        • 2018-09-06
        • 1970-01-01
        • 2017-06-17
        • 2021-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多