Добавить реализацию 'IDesignTimeDbContextFactory <ApplicationDbContext>' в проект - PullRequest
0 голосов
/ 24 мая 2018

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

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

My project Structure

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());
    }

1 Ответ

0 голосов
/ 24 мая 2018

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

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

cd .\MyProject.Core

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

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

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

...