Не удается создать DbSet для ApplicationUser - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть основной проект asp.net, который я занимаюсь рефакторингом.Ранее у меня была вся логика базы данных, содержащаяся в проекте, однако теперь, когда мы добавляем WebAPI, я переместил логику базы данных в отдельный стандартный проект ядра .net, поэтому она используется двумя проектами.

Похоже, что это нормально работает в новом веб-API, однако у меня есть проблемы в исходном проекте, связанные с signInManager и классом ApplicationUser.

Все компиляции просто отлично, однако я получаю следующую ошибку во время выполнения:

InvalidOperationException: Cannot create a DbSet for 'ApplicationUser' because this type is not included in the model for the context.`

Я также переместил этот класс ApplicationUser в новый проект DAL, и, насколько я могу видеть, я обновил все ссылки на него (безусловно, достаточно, чтобы пройти проверку времени компиляции).

Мой файл startup.cs выглядит следующим образом:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

        services.AddIdentity<ApplicationUser, IdentityRole>()
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();

        // password policy settings
        services.Configure<IdentityOptions>(options =>
        {
            // Password settings
            options.Password.RequireDigit = true;
            options.Password.RequiredLength = 8;
            options.Password.RequireNonAlphanumeric = false;
            options.Password.RequireUppercase = true;
            options.Password.RequireLowercase = false;
            options.Password.RequiredUniqueChars = 6;

            // Lockout settings
            options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(30);
            options.Lockout.MaxFailedAccessAttempts = 10;
            options.Lockout.AllowedForNewUsers = true;

            // User settings
            options.User.RequireUniqueEmail = true;

        });

        // Add session cookie
        services.ConfigureApplicationCookie(options =>
        {
            // Cookie settings
            options.Cookie.HttpOnly = true;
            options.ExpireTimeSpan = TimeSpan.FromMinutes(30);
            // If the LoginPath isn't set, ASP.NET Core defaults 
            // the path to /Account/Login.
            options.LoginPath = "/Account/Login";
            // If the AccessDeniedPath isn't set, ASP.NET Core defaults 
            // the path to /Account/AccessDenied.
            options.AccessDeniedPath = "/Account/AccessDenied";
            options.SlidingExpiration = true;

            // Disable redirect to login page for unauthorized requests to / api resources
            options.Events.OnRedirectToLogin = context =>
            {
                if (context.Request.Path.StartsWithSegments("/api") && context.Response.StatusCode == StatusCodes.Status200OK)
                {
                    context.Response.StatusCode = StatusCodes.Status401Unauthorized;
                    return Task.FromResult<object>(null);
                }
                else
                {
                    context.Response.Redirect(context.RedirectUri);
                    return Task.FromResult<object>(null);
                }
            };

        });

        // Add application services.
        services.AddTransient<IEmailSender, EmailSender>();

        // add our Db handlers
        services.AddScoped<DAL.Services.Interfaces.IServices, DAL.Services.Services>();

        services.AddMvc();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider services)
    {
        if (env.IsDevelopment())
        {
            app.UseBrowserLink();
            app.UseDeveloperExceptionPage();
            app.UseDatabaseErrorPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
        }

        var cultureInfo = new CultureInfo("en-GB");

        CultureInfo.DefaultThreadCurrentCulture = cultureInfo;
        CultureInfo.DefaultThreadCurrentUICulture = cultureInfo;

        app.UseStaticFiles();

        app.UseAuthentication();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });


    }


}

У меня в верхней части есть оператор "using":

using IceBowl.DAL; using IceBowl.DAL.Models;

Таким образом, вызов AddIdentity проходит правильно ApplicationUser - на самом деле, есть только один класс ApplicationUser, я удалил оригинал.

В коде, похоже, возникают проблемыв следующей строке:

var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);

Есть что-то, что не нравится в менеджере входа, но я затрудняюсь объяснить, что именно.Все ссылки были обновлены, и теперь они указывают на DAL, который содержит datacontext и класс ApplicationUser.

Любые указатели?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...