我们有一个使用三个数据库的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")));
答案 0 :(得分:0)
好吧,看来是对Entity框架的升级引起了IdentityDBcontext的破坏。降级至2.2.2,我们重新营业。
我有种感觉,十年前我们又回到了dll地狱……:-(