Virgil
Virgil

Reputation: 3

Unable to create a 'DbContext' of type 'IdentityContext'. The exception

I wanted to create a many to many connection between the identity user and another table but when i modified my identity context and wanted to create a migration i got the following error

Unable to create a 'DbContext' of type 'IdentityContext'. The exception 'Unable to resolve service for type 'Microsoft.EntityFrameworkCore.DbContextOptions`1[DataloaderApi.IdentityContext]' while attempting to activate 'DataloaderApi.IdentityContext'.' was thrown while attempting to create an instance. For the different patterns supported at design time, see https://go.microsoft.com/fwlink/?linkid=851728

here are the codes that are maybe related to the issue:

dbcontext:

using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using DataloaderApi.Data;

namespace DataloaderApi
{
    public class IdentityContext: IdentityDbContext<ApplicationUser>
    {

        public DbSet<TaskData> TaskData { get; set; }

       
        public IdentityContext(DbContextOptions<IdentityContext> options) : base(options)
        {
        }

        protected override void OnModelCreating(ModelBuilder builder)
        {
            base.OnModelCreating(builder);

            // Configuring many-to-many relationship
            builder.Entity<TaskData>()
                .HasMany(t => t.AssignedUsers)
                .WithMany(u => u.Tasks)
                .UsingEntity(j => j.ToTable("TaskDataUserJunction"));
        }

    }
}

the modified identity user

namespace DataloaderApi.Data
{
    public class ApplicationUser:IdentityUser
    {


        public ICollection<TaskData> Tasks { get; set; }

    }
}

TaskData:

using Microsoft.AspNetCore.Identity;

namespace DataloaderApi.Data
{
    public class TaskData
    {
        public long Id { get; set; }

        public string TaskName { get; set; }

        public string TaskDescription { get; set; }

        public string sourceLocation { get; set; }

        public string DestinationTable { get; set; }

        public bool isActive { get; set; }

        public ICollection<ApplicationUser> AssignedUsers { get; set; }



    }
}

And my program.cs


using System.Text;
using System.Threading.Tasks;
using DataloaderApi.Dao;
using DataloaderApi.Dao.Interfaces;
using DataloaderApi.Data;
using DataloaderApi.DataRead;
using DataloaderApi.Extension;
using Hangfire;
using IdentityAuthTest.Services;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using Microsoft.IdentityModel.Tokens;
using Microsoft.Net.Http.Headers;
namespace DataloaderApi
{
    public class Program
    {
        public static async Task Main(string[] args)
        {
            var builder = WebApplication.CreateBuilder(args);

            // Add services to the container.

            builder.Services.AddControllers();
            // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
            builder.Services.AddEndpointsApiExplorer();
            builder.Services.AddSwaggerAuth();

            var connectionString = builder.Configuration.GetConnectionString("dataloaderConnection");

            builder.Services.AddHangfire(configuration => configuration      
                  .UseSqlServerStorage(connectionString)
                   
                  );


            builder.Services.AddDbContext<IdentityContext>(options =>
    options.UseSqlServer(connectionString));
            builder.Services.Configure<IdentityOptions>(options =>
            {
                options.Password.RequireDigit = false;
                options.Password.RequiredLength = 5;
                options.Password.RequireLowercase = true;
                options.Password.RequireNonAlphanumeric = false;
                options.Password.RequireUppercase = false;
            });



            // Authentication 

            builder.Services.AddAuthorization();
            builder.Services.AddAuthentication();
            builder.Services.AddIdentityApiEndpoints<ApplicationUser>()
             .AddRoles<IdentityRole>()
            .AddEntityFrameworkStores<IdentityContext>();

            // Hangfire
            builder.Services.AddHangfireServer();
             builder.Services.AddDbContextPool<Applicationcontext>(options =>

                options.UseSqlServer(connectionString)
               

                );


            //Dependency Injection
            builder.Services.AddSingleton<IConfiguration>(builder.Configuration);

            builder.Services.AddScoped(typeof(ICsvLoadDao<>), typeof(CsvLoaderDao<>));
            builder.Services.AddScoped(typeof(IAuthHandlingDao), typeof(AuthHandlingDao));
            builder.Services.AddScoped<DataProcess>();
            builder.Services.AddAuthorization(options =>
            {
                options.AddPolicy("Admin", policy =>
                    policy.RequireRole("Admin"));
            });

            builder.Services.AddCors(options =>
            {
                options.AddPolicy("AllowSpecificOrigins", policy =>
                    policy.WithOrigins("https://localhost:7046", "http://localhost:7046")
                          .AllowAnyMethod()
                          .AllowAnyHeader());
            });

            var app = builder.Build();

            if (app.Environment.IsDevelopment())
            {
                app.UseSwagger();
                app.UseSwaggerUI();
            }

            app.MapIdentityApi<ApplicationUser>();
            app.UseCors("AllowSpecificOrigins");
            app.UseHttpsRedirection();

            app.UseAuthorization();
            app.UseHangfireDashboard();

            app.MapControllers();
            //Create admin user if no admin user exist
            using (var scope = app.Services.CreateScope())
            {
                await SeedData.Initialize(scope.ServiceProvider);
            }

            app.Run();
        }
    }
}

Upvotes: 0

Views: 32

Answers (1)

Virgil
Virgil

Reputation: 3

I found the issue in my Dao i still referencing the identityUser in usermanager not my custom one

Upvotes: 0

Related Questions