簡體   English   中英

ASP.NET Core:在使用自定義 DbContext 的同時也使用 Identity 時出錯

[英]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 ReadDataContextWriteDataContext ,我用底部 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM