定义类型为IdentityDbContext

时间:2019-07-18 10:16:39

标签: c# dependency-injection constraints azure-functions dbcontext

我们有一个使用三个数据库的Azure Functions应用,其中一个数据库的类型为“ IdentityDbContext”。 出乎意料的是,在愉快地使用了这些上下文几个月之后,在重建之后,我们在启动Function应用程序时遇到了此错误:

  

Microsoft.Extensions.DependencyInjection.EntityFrameworkServiceCollectionExtensions.AddDbContext方法:类型参数'xxx.ApplicationDbContext'违反了类型参数'TContext'的约束。

我们试图找到可能导致此问题的更改,但是我们很沮丧……

Stackoverflow等中类似的问题表明这是早期版本的Azure Functions中的问题,但现在应解决。

这是令人反感的DBcontext的类:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
    : base(options)
    {
        Database.EnsureCreated();
    }

    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);
        // Customize the ASP.NET Identity model and override the defaults if needed.
        // For example, you can rename the ASP.NET Identity table names and more.
        // Add your customizations after calling base.OnModelCreating(builder);
        builder.Entity<ApplicationUser>().HasMany(e => e.Claims).WithOne().HasForeignKey(e => e.UserId).IsRequired().OnDelete(DeleteBehavior.Cascade);
    }
}

这是所有地狱破裂的地方:

var services = new ServiceCollection()
    .AddDbContext<MobidotContext>(options => options.UseSqlServer(config.GetConnectionString("MobidotDbConnection")))
    .AddDbContext<MobilityDbContext>(options => options.UseSqlServer(config.GetConnectionString("MobilityDbConnection")))
    .AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(config.GetConnectionString("DefaultConnection")));

1 个答案:

答案 0 :(得分:0)

好吧,看来是对Entity框架的升级引起了IdentityDBcontext的破坏。降级至2.2.2,我们重新营业。

我有种感觉,十年前我们又回到了dll地狱……:-(