Добавьте в проект реализацию IDesignTimeDbContextFactory <ApplicationDbContext>

Я создал основной проект asp.net и выбрал UseIndiviualUserAccount как My AutenticationType, После подготовки проекта визуальной студией я получил готовый класс и контроллер, Очевидно, у меня есть папка миграции и ее конфигурация, поскольку я не хочу использовать структуру defulat ядра asp.net, я удалил папку миграции, создал новую библиотеку классов и переименовал ее в MyProject.Core. в MyProject.Core Class Library я создаю свои модели db и классы dbContext, поэтому мне нужно запустить команду add-migration "init" для создания моей базы данных, что я и сделал, но получил ошибку ниже, Примечание: я запускаю команду добавления миграции в Myproject.Core в PMC !! Невозможно создать объект типа ApplicationDbContext. Добавьте в проект реализацию IDesignTimeDbContextFactory или посмотрите https://go.microsoft.com/fwlink/?linkid=851728, чтобы узнать о дополнительных шаблонах, поддерживаемых во время разработки.

как я могу исправить эту ошибку, я прочитал какую-то статью на текущем сайте и на другом сайте, но не могу исправить свою проблему.

Добавьте в проект реализацию IDesignTimeDbContextFactory &lt;ApplicationDbContext&gt;

public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .Build();
}


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.AddTransient<IUnitOfWork, UnitOfWork>();
        services.AddTransient<IProvinceRepository, ProvinceRepository>();
        services.AddTransient<IBrandRepository, BrandRepository>();

        services.AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

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

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

        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)
    {
        if (env.IsDevelopment())
        {
            app.UseBrowserLink();
            app.UseDeveloperExceptionPage();
            app.UseDatabaseErrorPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
        }

        app.UseStaticFiles();

        app.UseAuthentication();

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

public class ApplicationDbContext : IdentityDbContext<ApplicationUser,ApplicationRole,string>
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options): base(options)
    {
    }
    static ApplicationDbContext()
    {
        // Set the database intializer which is run once during application start
        // This seeds the database with admin user credentials and admin role
        // Database.SetInitializer<ApplicationDbContext>(new ApplicationDbInitializer());
    }

Не могли бы вы предоставить код из классов Startup и ApplicationDbContext.

Brad 24.05.2018 08:27

@brad да, я знаю ...

Hamid 24.05.2018 08:36

В каком проекте вы пытаетесь создать миграции?

Brad 24.05.2018 08:44

@Brad MyProject.Core

Hamid 24.05.2018 08:45

Ваш проект MyProject.Core является проектом .NET Standard. Вы должны создать миграции из проекта приложения .NET Core с классом Startup, чтобы ваш ApplicationDbContext можно было создать из поставщика услуг.

Brad 24.05.2018 08:57

@Brad 1. Я уверен, что это проект .Net Core 2. Я не понял вторую часть ваших слов, мы всегда должны помещать наш dbcontext и папку миграции в основной проект (у нас нет предпосылок для выполнения этого подхода в классе библиотека?)

Hamid 24.05.2018 09:05

Позвольте нам продолжить обсуждение в чате.

Hamid 24.05.2018 09:13
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
7
1 881
1

Ответы 1

Это может произойти, если EF не знает, где находится точка входа в ваше приложение. Вам не необходимо реализовать IDesignTimeDbContextFactory, если вы используете BuildWebHost. Прежде всего, убедитесь, что вы выполняете миграцию из проекта, содержащего миграции.

Например ... если вы используете Package Manager Console:

cd .\MyProject.Core

Затем запустите миграцию с помощью startup-project и укажите его на проект с BuildWebHost.

dotnet ef --startup-project ../MyProject.Web/ migrations add Initial

В противном случае EF не будет знать, где находится ваша реализация.

Просто чтобы добавить к этому сообщению, чтобы помочь другим, подобным мне, если вы пытаетесь запустить миграцию на Mac и делаете это с терминала, вам нужно будет указать запускаемый проект с терминала точно так же, как описано в эта почта.

Allison Schambers 19.08.2018 23:07

Это помогло мне разобраться в трех вещах: 1) установить веб-проект как запускаемый проект в решении (или добавить его в командную строку с параметром, как показано); 2) сменить директорию в Package Manager Console на data-project; 3) измените «проект по умолчанию» (раскрывающийся вверху) в консоли диспетчера пакетов на проект данных.

Yahoo Serious 05.03.2019 17:56

Другие вопросы по теме