Finbuckle.MultiTenant icon indicating copy to clipboard operation
Finbuckle.MultiTenant copied to clipboard

usermanager NullReferenceException 

Open dalton5 opened this issue 3 years ago • 2 comments

Hi,

I use a seed method to create roles and users.

I have custom User class (ApplicationUser) and custom Role class (ApplicationRole)

I use a seed method to create roles and users. I did not setup ApplicationUser and ApplicationRole as multitenant because they could be shared between tenants.

My dbcontext is like this:

    `       public class ApplicationDbContext : MultiTenantIdentityDbContext<ApplicationUser, ApplicationRole, string>, 
    IMultiTenantStore<CustomTenantInfo>
    {

    public ApplicationDbContext(ITenantInfo tenantInfo, DbContextOptions<ApplicationDbContext> options)
          : base(tenantInfo, options)
    {
    }

    public ApplicationDbContext(ITenantInfo tenantInfo) : base(tenantInfo)
    {
    }`

So I can create roles and users but when I user usermanager.AddToRoleAsync(user, permission) I have an error null referenceexception.

I have checked and it seems to UserRoles which is null.

How can I fix this?

Stacktrace:

at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken) at System.Threading.Tasks.Task.Wait() at ApplicationDbInitializer.SeedUsersAsync(UserManager1 userManager, RoleManager1 roleManager, ApplicationDbContext applicationDbContext) in C:\Users\alexis\Documents\GitHub\SaasMonkey\SaasMonkey\Data\ApplicationDbContext.cs:line 145 at SaasMonkey.Startup.Configure(IApplicationBuilder app, IWebHostEnvironment env, UserManager1 userManager, RoleManager1 roleManager, ApplicationDbContext applicationDbContext) in C:\Users\alexis\Documents\GitHub\SaasMonkey\SaasMonkey\Startup.cs:line 134 at System.RuntimeMethodHandle.InvokeMethod(Object target, Span1& arguments, Signature sig, Boolean constructor, Boolean wrapExceptions) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at Microsoft.AspNetCore.Hosting.ConfigureBuilder.Invoke(Object instance, IApplicationBuilder builder) at Microsoft.AspNetCore.Hosting.ConfigureBuilder.<>c__DisplayClass4_0.<Build>b__0(IApplicationBuilder builder) at Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.<>c__DisplayClass15_0.<UseStartup>b__1(IApplicationBuilder app) at Microsoft.AspNetCore.Mvc.Filters.MiddlewareFilterBuilderStartupFilter.<>c__DisplayClass0_0.<Configure>g__MiddlewareFilterBuilder|0(IApplicationBuilder builder) at Microsoft.AspNetCore.Server.IIS.Core.IISServerSetupFilter.<>c__DisplayClass2_0.<Configure>b__0(IApplicationBuilder app) at Microsoft.AspNetCore.HostFilteringStartupFilter.<>c__DisplayClass0_0.<Configure>b__0(IApplicationBuilder app) at Microsoft.AspNetCore.Hosting.GenericWebHostService.<StartAsync>d__37.MoveNext()`

dalton5 avatar Oct 30 '22 10:10 dalton5

hi @dalton5 Sorry for the slow reply. Are you still running into this issue? Do you have a sample project repo I could look at to see the problem in action?

There are other tables involved for the Role <--> User relationship and per your setup they are still multitenant. Honestly if your users and roles are not per-tenant I'd recommend just going with a regular IdentityDbContext.

AndrewTriesToCode avatar Nov 22 '22 00:11 AndrewTriesToCode