Было найдено более одного DbContext с именем NewProject.Models.DbContext. Укажите, какой из них использовать, указав его полное имя с точным регистром.

Я разрабатывал веб-приложение с Asp.Net Core 2.1. После того, как я добавил новую личность с помощью скаффолдера, он сгенерировал мне эти коды:

Код, созданный в IdentityStartup.cs

[assembly:HostingStartup(typeof(ShareAndCare.Areas.Identity.IdentityHostingStartup))]
namespace ShareAndCare.Areas.Identity
{
    public class IdentityHostingStartup : IHostingStartup
    {
        public void Configure(IWebHostBuilder builder)
        {
            builder.ConfigureServices((context, services) => {

                services.AddDbContext<ShareAndCareContext>(options =>
                   options.UseLazyLoadingProxies().UseSqlServer(
                       context.Configuration.GetConnectionString("ShareAndCareContextConnection")));

                services.AddIdentity<ShareAndCareUser, IdentityRole>()
                .AddEntityFrameworkStores<ShareAndCareContext>()
                .AddDefaultTokenProviders();

                services.AddSingleton<IEmailSender, EmailSender>();               

            });

        }
    }
}

Код, созданный в Startup.cs

    namespace ShareAndCare
    {
        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.Configure<CookiePolicyOptions>(options =>
                {
                    // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                    options.CheckConsentNeeded = context => true;
                    options.MinimumSameSitePolicy = SameSiteMode.None;
                });            

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

                app.UseHttpsRedirection();
                app.UseStaticFiles();
                app.UseAuthentication();
                app.UseCookiePolicy();

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

Это работало нормально, пока я не захотел построить модель с контроллером и представлениями, используя EF. Когда все настроил и нажал "ОК", я получил сообщение об ошибке: Найдено более одного DbContext с именем "ShareAndCare.Models.ShareAndCareContext". Укажите, какой из них использовать, предоставив его полное имя в точном регистре. Я проверил все папки и пространства имен, но там не было проблем, был только один контекст с таким именем. Так в чем была проблема ?


person brainoverflow98    schedule 13.07.2018    source источник
comment
Ctrl+F -> ShareAndCareContext   -  person vasily.sib    schedule 13.07.2018
comment
Я нашел решение, но что вы подразумеваете под Ctrl+F?   -  person brainoverflow98    schedule 13.07.2018
comment
я имею в виду. Вы уверены, что существует только один класс «ShareAndCareContext»? Вы пытались найти все вхождения строки «ShareAndCareContext» в файлах вашего проекта?   -  person vasily.sib    schedule 13.07.2018
comment
Да, приятель, я пробовал все и проверял каждое пространство имен, даже если я создавал новый контекст, он выдавал ту же ошибку. Как я упоминал ниже, проблема заключалась в добавлении контекста в методе Configure IdentityStartup.cs.   -  person brainoverflow98    schedule 13.07.2018
comment
Хорошо, приятель. Я вижу, что вы уже нашли решение. Мой комментарий был всего лишь предположением и был опубликован за 5 минут до вашего ответа.   -  person vasily.sib    schedule 13.07.2018
comment
В любом случае спасибо :)   -  person brainoverflow98    schedule 13.07.2018


Ответы (2)


Я оставляю этот вопрос и ответ здесь, чтобы люди не сходили с ума, ища все возможные решения вручную, как это сделал я. Я обнаружил, что добавление контекста в метод Configure файла IdentityHostingStartup.cs вызывает проблему. Я изменил место добавления контекста в метод Configure файла Startup.cs, и все заработало нормально.

namespace ShareAndCare
{
    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.Configure<CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });            

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

            services.AddDbContext<ShareAndCareContext>(options =>
                   options.UseLazyLoadingProxies().UseSqlServer(
                       Configuration.GetConnectionString("ShareAndCareContextConnection")));

        }

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

            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseAuthentication();
            app.UseCookiePolicy();

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });                
        }   
    }
}
person brainoverflow98    schedule 13.07.2018
comment
Когда я пытаюсь это сделать, я получаю сообщение об ошибке: для типа объекта IdentityHostingStartup требуется определенный первичный ключ. Кто-нибудь сталкивался с этим? - person Grayson; 22.01.2019
comment
Большое тебе спасибо. Моя проблема была такой же, и я решил переместить код из IdentityHostingStartup.cs в startup.cs. - person Ali; 20.03.2019
comment
Великолепно, спасибо .. Решил мою идентичную проблему и с .Net Core 3 .. Почему идентификационный код настаивает на собственном запуске. Я уверен, что это может иметь цель для более крупных проектов, использующих области... но усложняет это... и вызывает такие хлопоты. - person Brett JB; 06.04.2020
comment
он имел в виду, что переместил код инициализации из IdentityHostingStartup.cs в Startup.cs public void ConfigureServices(IServiceCollection services) в строке кода services.AddDbContext<projecctnameeABC>(...); есть. Господи, просто четко сформулируй это, вместо того, чтобы захлопывать весь абзац кода. - person A. Go; 09.09.2020
comment
Спасибо, что оставили решение! - person amm98d; 21.05.2021

Я просто удалил 2 файла:

  1. Areas/Identity/Data/APNameIdentityDbContext.cs и
  2. Области/Идентификация/IdentityHostingStartup.cs

Это исправило ошибку!

person DedicatedLearner    schedule 06.10.2020