[英]ASP.NET Core: Error when using a custom DbContext while also using Identity
我已經使用實體框架基於現有的 Azure SQL 數據庫創建了一個 dbContext。 我將此數據庫添加到我的應用程序的服務中,如下所示:
public void ConfigureServices(IServiceCollection services)
{
//Identity Database Context
services.AddDbContext<IdentityDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DataDb"),
optionsBuilders =>
optionsBuilders.MigrationsAssembly("WebPortal"))
);
services.AddIdentity<IdentityUser, IdentityRole>()
.AddEntityFrameworkStores<IdentityDbContext>()
.AddDefaultTokenProviders();
//Custom Database Context
services.AddDbContext<CustomDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("CustomDb"))
);
services.AddMvc();
}
當我嘗試運行它時,我收到以下錯誤消息:
InvalidOperationException:傳遞給 IdentityDbContext 構造函數的 DbContextOptions 必須是 DbContextOptions。 注冊多個 DbContext 類型時,請確保每個上下文類型的構造函數都有一個 DbContextOptions 參數,而不是一個非通用的 DbContextOptions 參數。
我的自定義上下文的構造函數確實有一個參數:
public CustomDbContext(DbContextOptions<CustomDbContext> options)
: base(options)
{
}
為什么我收到錯誤?
我有同樣的問題。 我的情況是,我需要兩個 Context ReadDataContext和WriteDataContext ,我用底部 Contexts 解決了這個異常
public class ReadOnlyDataContext : DbContext
{
public ReadOnlyDataContext(DbContextOptions options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.RemovePluralizingTableNameConvention();
Assembly assemblyWithConfigurations = typeof(TaskConfiguration).Assembly;
modelBuilder.ApplyConfigurationsFromAssembly(assemblyWithConfigurations);
}
}
注意DataContext構造函數
public class WriteDataContext : DbContext, IContext
{
public WriteDataContext(DbContextOptions<WriteDataContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.RemovePluralizingTableNameConvention();
Assembly assemblyWithConfigurations = typeof(TaskConfiguration).Assembly;
modelBuilder.ApplyConfigurationsFromAssembly(assemblyWithConfigurations);
}
}
和注冊
services.AddDbContext<DataContext>(opt =>
{
opt.UseSqlServer(configuration.GetConnectionString("CommanderConnection"));
opt.LogTo(Console.WriteLine).EnableSensitiveDataLogging();
});
services.AddDbContext<ReadOnlyDataContext>(opt =>
{
opt.UseSqlServer(configuration.GetConnectionString("CommanderConnection"));
opt.LogTo(Console.WriteLine).EnableSensitiveDataLogging();
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.