Nie można utworzyć migracji po uaktualnieniu do ASP.NET Core 2.0


109

Po uaktualnieniu do ASP.NET Core 2.0 nie mogę już tworzyć migracji.

Otrzymuję

„Wystąpił błąd podczas wywoływania metody„ BuildWebHost ”w klasie„ Program ”. Kontynuacja bez dostawcy usług aplikacji. Błąd: wystąpił jeden lub więcej błędów. (Nie można otworzyć bazy danych„… ”żądanej podczas logowania. Logowanie nie powiodło się. Logowanie nie powiodło się dla użytkownika „...” "

i

„Nie można utworzyć obiektu typu„ MyContext ”. Dodaj implementację„ IDesignTimeDbContextFactory ”do projektu lub zobacz https://go.microsoft.com/fwlink/?linkid=851728, aby poznać dodatkowe wzorce obsługiwane w czasie projektowania.”

Polecenie, które uruchomiłem wcześniej, było $ dotnet ef migrations add InitialCreate --startup-project "..\Web"(z projektu / folderu z DBContext).

Ciąg połączenia: "Server=(localdb)\\mssqllocaldb;Database=database;Trusted_Connection=True;MultipleActiveResultSets=true"

To jest mój Program.cs

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

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

3
Prawdopodobnie problem nie występuje w Program.cs. Prawdopodobnie jest to użycie instrukcji do załadowania danych początkowych na końcu metody Configure: DbInitializer.Initialize (kontekst); Jeśli masz tę instrukcję, skomentuj ją: //DbInitializer.Initialize(context); Następnie uruchom instrukcje migracji, aby przetestować. Jeśli pojawi się problem, kontynuuj działanie klasy DbInitializer.cs.
Miguel Torres C

1
Czy Twoja klasa MyContext znajduje się w innym projekcie biblioteki klas?
Orhun

Ten sam problem, kontekst jest w innej bibliotece. Jeśli id ​​dodaje parametr less consturctor do kontekstu, migracje działają, ale z tym samym błędem: (Wystąpił błąd podczas wywoływania metody „BuildWebHost” w klasie „Program”. Kontynuacja bez dostawcy usług aplikacji. Błąd: Nie ustawiono odwołania do obiektu do instancji obiektu.)
iBoonZ

Czy udało Ci się to w końcu rozwiązać?
Konrad Viltersten,

@MiguelTorresC dzięki za ten komentarz. Skomentowałem, że moje metody wysiewu i migracje znów zaczęły działać. Wielkie dzięki !!!
Amit Philips,

Odpowiedzi:


123

Możesz dodać klasę, która implementuje IDesignTimeDbContextFactory w projekcie sieci Web.

Oto przykładowy kod:

public class DesignTimeDbContextFactory : IDesignTimeDbContextFactory<CodingBlastDbContext>
{
    public CodingBlastDbContext CreateDbContext(string[] args)
    {
        IConfigurationRoot configuration = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json")
            .Build();
        var builder = new DbContextOptionsBuilder<CodingBlastDbContext>();
        var connectionString = configuration.GetConnectionString("DefaultConnection");
        builder.UseSqlServer(connectionString);
        return new CodingBlastDbContext(builder.Options);
    }
}

Następnie przejdź do projektu bazy danych i uruchom następujące polecenie z wiersza polecenia:

dotnet ef migrations add InitialMigration -s ../Web/

dotnet ef database update -s ../Web/

-s stands for startup project and ../Web/ is the location of my web/startup project.

ratunek


2
Otrzymuję: Nie znaleziono pliku konfiguracyjnego „appsettings.json” i nie jest on opcjonalny. Ścieżka fizyczna to „C: \ Users \ XXX \ Documents \ Visual Studio 2017 \ Projects \ XXX \ src \ XXX.Api \ bin \ Debug \ netcoreapp2.0 \ appsettings.json”. Moje ustawienia aplikacji znajdują się w C: \ Users \ XXX \ Documents \ Visual Studio 2017 \ Projects \ XXX \ src \ XXX.Api.
Reft

Upewnij się, że plik appsettings.json jest ustawiony na kopiowanie lokalne, co powinno rozwiązać problem z nie znalezieniem go
DaImTo,

1
To rozwiązanie wprowadza zależność od Entity Framework do aplikacji hosta (w moim przypadku jest to projekt sieci Web). Czy jest jakiś sposób, aby to obejść? Chciałbym, aby moja biblioteka repozytorium zawierała elementy EF i nie wprowadzała EF do aplikacji internetowej.
Banoona,

Mimo że jest to akceptowana odpowiedź, ta jest lepsza: stackoverflow.com/a/52671330/1737395 Rzeczywiście, uruchomienie migracji z flagą --verbose bardzo pomaga
barbara.post

73

Nie ma potrzeby IDesignTimeDbContextFactory.

Biegać

add-migration initial -verbose

które ujawnią szczegóły pod

Wystąpił błąd podczas uzyskiwania dostępu do IWebHost w klasie „Program”. Kontynuacja bez dostawcy usług aplikacji.

ostrzeżenie, które jest główną przyczyną problemu.

W moim przypadku problem polegał na tym, że posiadanie ApplicationRole : IdentityRole<int>i wywoływanie services.AddIdentity<ApplicationUser, IdentityRole>()powodowało poniższy błąd

System.ArgumentException: GenericArguments[1], 'Microsoft.AspNetCore.Identity.IdentityRole', 
on 'Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore`9[TUser,TRole,TContext,
TKey,TUserClaim,TUserRole,TUserLogin,TUserToken,TRoleClaim]' violates the constraint of type 'TRole'.
---> System.TypeLoadException: GenericArguments[1], 'Microsoft.AspNetCore.Identity.IdentityRole', 
on 'Microsoft.AspNetCore.Identity.UserStoreBase`8[TUser,TRole,TKey,TUserClaim,
TUserRole,TUserLogin,TUserToken,TRoleClaim]' violates the constraint of type parameter 'TRole'.

3
Tak - Verbose pomaga rzeczywiście odkryć prawdziwy problem. W moim przypadku nie dodałem usług AddDbContext do uruchomienia.
sudhakarssd

3
dotnet ef migrations add InitialCreate --verbose
barbara.post

4
@tchelidze Dziękuję za to, w moim przypadku nie miałem konstruktora bez parametrów w moim ApplicationDbContext.
Tiago Ávila

1
To fantastyczna wskazówka, powinna być akceptowaną odpowiedzią
Avrohom Yisroel

1
Dziękuję bardzo, pomogło mi to znaleźć mój problem i go rozwiązać. W moim przypadku był to „Nie zdefiniowano konstruktora bez parametrów dla typu„ Data.Access.DAL.MainDbContext ”.”, Dlatego właśnie usunąłem parametry z konstruktora i zadziałało to jak magia!
Sarah

25

Rozwiązanie 1: (znajdź problem w 99% przypadków)

Ustaw projekt aplikacji sieci Web jako projekt startowy

Uruchom następujące polecenia z -verboseopcją.

Add-Migration Init -Verbose

-verbose Opcja pomaga faktycznie odkryć prawdziwy problem, zawiera szczegółowe błędy.

Rozwiązanie 2:

Zmień nazwę BuildWebHost()na CreateWebHostBuilder(), ponieważ Entity Framework Core toolsspodziewaj się znaleźć CreateHostBuildermetodę, która konfiguruje hosta bez uruchamiania aplikacji.

.NET Core 2.2

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

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
} 

.NET Core 3.1

Zmień nazwę BuildWebHost()naCreateHostBuilder()

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

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

Rozwiązanie 3:

Upewnij się, że dodano Dbcontextdo iniekcji zależności: AddDbContext<TContext>sprawi, że zarówno typ DbContext TContext, jak i odpowiedni będzie DbContextOptions<TContext>dostępny do wstrzyknięcia z kontenera usługi. Wymaga to dodania argumentu konstruktora do DbContexttypu, który akceptuje DbContextOptions<TContext>.

Przykład: w Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<AppDbContext>(options => options.UseSqlServer(connectionString));
}

Kod AppDbContext :

public class AppDbContext: DbContext
{
    public AppDbContext(DbContextOptions<AppDbContext> options)
      :base(options)
    { }

}

1
To zadziałało dla mnie. Zmieniono funkcję BuildWebHost w Program.cs z public static IWebHostBuilder BuildWebHost(string[] args)na public static IWebHost BuildWebHost(string[] args)z .Build()teraz zawartą w funkcji
zola25

1
Chłopaki, jeśli używasz ASP.NET Core 2.1+, metoda BuildWebHost będzie miała inną nazwę - CreateWebHostBuilder z powodu docs.microsoft.com/en-us/aspnet/core/migration/ ... więc zmień nazwę CreateWebHostBuilder na BuildWebHost, a migracja znajdzie BuildWebHost i pobierz z niego DbContext.
KEMBL

2
Dzięki kolego, rozwiązany po spędzeniu 2 godzin na konfigurowaniu bez używaniaIDesignTimeDbContextFactory
Azri Zakaria

3
Dzięki za flagę „-Verbose”. Pomogło mi to znaleźć podstawową przyczynę wyjątku.
Sergey_T

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

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

Po prostu zmień nazwę BuildWebHost()na CreateWebHostBuilder(), ponieważ migracje używają tej metody domyślnie.


4
CO. To powinno być reklamowane na każdej stronie zajmujących się tym zagadnieniem Poważnie . Natychmiastowy sukces. Dziękuję Ci.
Chaim Eliyah

Uratuj mój dzień !!! To bardzo dziwny błąd. Używam .net core 3.0 z wersją zapoznawczą 7 i ten błąd nadal istnieje
D Todorov

@DTodorov przeczytaj ten devblogs.microsoft.com/dotnet/ ...
sherox

D Todorov Po prostu zmień nazwę BuildWebHost () na CreateHostBuilder ()
Ali Bayat

1
@WernerCD Cuz Worker używa metody CreateHostBuilder (), która implementuje IHostBuilder z Net Core 3
sherox

11

W moim przypadku przyczyną problemu było wiele projektów startowych. W swoim rozwiązaniu mam trzy projekty: Mvc, Api i Dal. DbContext i migracje w projekcie Dal.

Skonfigurowałem wiele projektów startowych. Po kliknięciu przycisku Start działały projekty Mvc i Api. Ale w tym przypadku otrzymywałem ten błąd.

„Nie można utworzyć obiektu typu„ MyContext ”. Dodaj implementację„ IDesignTimeDbContextFactory ”do projektu lub zobacz https://go.microsoft.com/fwlink/?linkid=851728, aby poznać dodatkowe wzorce obsługiwane w czasie projektowania.”

Mogłem pomyślnie dodać migrację po ustawieniu Mvc jako jedynego projektu startowego i wybraniu Dal w konsoli Menedżera pakietów.


1
Dziękuję, mnie spotkało to samo. Musiałem zmienić projekt startowy na miejsce, w którym istnieją klasy Startup / Program. Komunikat o błędzie to kiepski żart.
Ľuboš Čurgó

1
Komunikaty wyjściowe były naprawdę frustrujące. Nieoczekiwanie nie wybrałem żadnego projektu startowego. To był powód, dla którego nie można było utworzyć dbContext. Dzięki.
upkit

1
Dziękuję panu ... Oszczędzam dużo czasu
Naveed Khan

7

W klasie AppContext.cs oprócz klasy AppContext dodaj kolejną klasę:

// required when local database deleted
public class ToDoContextFactory : IDesignTimeDbContextFactory<AppContext>
{
    public AppContext CreateDbContext(string[] args)
    {
        var builder = new DbContextOptionsBuilder<AppContext>();
          builder.UseSqlServer("Server=localhost;Database=DbName;Trusted_Connection=True;MultipleActiveResultSets=true");
        return new AppContext(builder.Options);
    }
}

To rozwiąże twój drugi problem:

„Nie można utworzyć obiektu typu„ MyContext ”. Dodaj implementację„ IDesignTimeDbContextFactory ”do projektu,

Następnie będziesz mógł dodać migrację Initial i wykonać ją, uruchamiając polecenie update-database . Jeśli jednak uruchomisz te polecenia, gdy w lokalnym SqlServer nie ma jeszcze bazy danych, zostanie wyświetlone ostrzeżenie, takie jak pierwszy błąd: „Błąd

wystąpiło podczas wywoływania metody „BuildWebHost” w klasie „Program” ... Logowanie nie powiodło się. Logowanie nie powiodło się dla użytkownika „...” "

Ale to nie jest błąd, ponieważ migracja zostanie utworzona i będzie można ją wykonać. Więc po prostu zignoruj ​​ten błąd po raz pierwszy, a później, ponieważ Db będzie istnieć, nie powtórzy się.


4

sprawdź, czy masz odniesienie

<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.0.0" />

5
Używam, <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />który zawiera to odniesienie. Próbowałem również uwzględnić powyższe, ale bez zmian.
ruhm

4

Możesz wypróbować to rozwiązanie z tej dyskusji , której inspiracją był ten post .

public static IWebHost MigrateDatabase(this IWebHost webHost)
{
    using (var scope = webHost.Services.CreateScope())
    {
        var services = scope.ServiceProvider;

        try
        {
            var db = services.GetRequiredService<MyContext>();
            db.Database.Migrate();
        }
        catch (Exception ex)
        {
            var logger = services.GetRequiredService<ILogger<Program>>();
            logger.LogError(ex, "An error occurred while migrating the database.");
        }
    }

    return webHost;
}
public static void Main(string[] args)
{
    BuildWebHost(args)
        .MigrateDatabase()
        .Run();
}

2
Nadal otrzymuję: Dodaj implementację „IDesignTimeDbContextFactory <DatabaseContext>” ......
Reft

4

Coś, co naprawdę mi pomogło, to ten artykuł: https://elanderson.net/2017/09/unable-to-create-an-object-of-type-applicationdbcontext-add-an-implementation-of-idesigntimedbcontextfactory/

Podstawową ideą jest to, że przy zmianie z .net core 1 na 2 cała inicjalizacja db powinna zostać przeniesiona z StartUp.cs do Program.cs. W przeciwnym razie zadania EF próbują uruchamiać inity bazy danych podczas wykonywania zadań.

„W oficjalnych dokumentach migracji ( https://docs.microsoft.com/en-us/ef/core/miscellaneous/1x-2x-upgrade ) znajduje się fajna sekcja zatytułowana„ Przenieś kod inicjalizacji bazy danych ”, która wydaje mi się przegapione. Zanim więc zaczniesz szukać króliczych nory, tak jak ja, upewnij się, że to nie jest to, co powoduje potrzebę dodania implementacji IdesignTimeDbContextFactory ”.


Dzięki, to też mi pomogło.
Siergiej

3

Z

https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/dbcontext-creation

Podczas tworzenia nowej aplikacji ASP.NET Core 2,0 ten hak jest dołączany domyślnie. W poprzednich wersjach EF Core i ASP.NET Core narzędzia próbują wywołać Startup.ConfigureServices bezpośrednio w celu uzyskania dostawcy usług aplikacji, ale ten wzorzec nie działa już poprawnie w aplikacjach ASP.NET Core 2,0. W przypadku uaktualniania aplikacji ASP.NET Core 1.x do wersji 2,0 możesz zmodyfikować klasę Program, aby była zgodna z nowym wzorcem.

Dodaj fabrykę w .Net Core 2.x

public class BloggingContextFactory : IDesignTimeDbContextFactory<BloggingContext>
    {
        public BloggingContext CreateDbContext(string[] args)
        {
            var optionsBuilder = new DbContextOptionsBuilder<BloggingContext>();
            optionsBuilder.UseSqlite("Data Source=blog.db");

            return new BloggingContext(optionsBuilder.Options);
        }
    }

3

Miałem ten problem i rozwiązałem go Ustaw -> Aplikacja sieciowa (dołączony Program.cs) Projekt do -> „Ustaw jako projekt startowy”

Następnie uruchom -> dodaj-migrację początkową -verbose

w konsoli Menedżera pakietów

Ustaw jako projekt startowy


Dziękuję, jedynym rozwiązaniem, które zadziałało, było ustawienie projektu internetowego jako projektu startowego i właśnie to należało zrobić.
user3012760

3

Jeśli chcesz uniknąć tych IDesignTimeDbContextFactory: po prostu upewnij się, że nie używasz żadnej metody Seed w swoim uruchomieniu. Podczas uruchamiania korzystałem ze statycznej metody inicjującej i powodowała ten błąd.


2

Wcześniej skonfigurowano dane inicjatora w metodzie Configure w pliku Startup.cs. Obecnie zaleca się używanie metody Configure tylko do konfigurowania potoku żądań. Kod startowy aplikacji należy do metody Main.

Refaktoryzowana metoda Main. Dodaj następujące odwołania do pliku Program.cs:

using Microsoft.Extensions.DependencyInjection;

using MyProject.MyDbContextFolder;

public static void Main(string[] args)
{
    var host = BuildWebHost(args);

    using (var scope = host.Services.CreateScope())
    {
        var services = scope.ServiceProvider;
        try
        {
            var context = services.GetRequiredService<MyDbConext>();
            DbInitializer.Initialize(context);
        }
        catch (Exception ex)
        {
            var logger = services.GetRequiredService<ILogger<Program>>();
            logger.LogError(ex, "An error occurred while seeding the database.");
        }
    }

    host.Run();
}



2

W moim przypadku problem wystąpił, ponieważ w moim pliku Startup.cs została wywołana metoda o nazwie SeedData.EnsurePopulated () .

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

    public void ConfigureServices(IServiceCollection services)
    {
        //
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseDeveloperExceptionPage();
        app.UseStatusCodePages();
        app.UseStaticFiles();
        app.UseSession();
        app.UseMvc(routes =>
        {
            //
        });

        SeedData.EnsurePopulated(app);
    }
}

Prace SeedData klasie jest dodanie początkową danych do tabeli bazy danych. Jego kod to:

public static void EnsurePopulated(IApplicationBuilder app)
    {
        ApplicationDbContext context = app.ApplicationServices.GetRequiredService<ApplicationDbContext>();
        context.Database.Migrate();
        if (!context.Products.Any())
        {
            context.Products.AddRange(
            new Product
            {
                Name = "Kayak",
                Description = "A boat for one person",
                Category = "Watersports",
                Price = 275
            },
            ....
            );
            context.SaveChanges();
        }
    }

ROZWIĄZANIE

Przed wykonaniem migracji po prostu zakomentuj wywołanie klasy SeedData w pliku Startup.cs.

// SeedData.EnsurePopulated(app);

To rozwiązało mój problem i mam nadzieję, że Twój problem również został rozwiązany w ten sam sposób.


1

Napotkałem ten sam problem. Mam w rozwiązaniu dwa projekty. który

  1. API
  2. Usługi i repozytorium, które przechowują modele kontekstowe

Początkowo projekt API był ustawiony jako projekt startowy.

Zmieniłem projekt Startup na taki, który zawiera klasy kontekstu. Jeśli używasz programu Visual Studio , możesz ustawić projekt jako projekt startowy przez:

otwórz eksplorator rozwiązań >> kliknij prawym przyciskiem myszy projekt kontekstowy >> wybierz Ustaw jako projekt startowy


1

Przede wszystkim upewnij się, że skonfigurowałeś swoją bazę danych w Startup.cs W moim przypadku otrzymałem ten błąd, ponieważ nie określiłem poniżej wStartup.cs

    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection"), x => x.MigrationsAssembly("<Your Project Assembly name where DBContext class resides>")));

1

Korzystanie z ASP.NET Core 3.1 i EntityFrameWorkCore 3.1.0. Zastępowanie OnConfiguring klasy kontekstu tylko za pomocą konstruktora bez parametrów

```protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfigured)
        {
            IConfigurationRoot configuration = new ConfigurationBuilder()
               .SetBasePath(Directory.GetCurrentDirectory())
               .AddJsonFile("appsettings.json")
               .Build();
            var connectionString = configuration.GetConnectionString("LibraryConnection");
            optionsBuilder.UseSqlServer(connectionString);
        }
    }
```

1

Miałem do czynienia z błędem

„Nie można utworzyć obiektu typu„ MyContext ”. Dodaj implementację„ IDesignTimeDbContextFactory ”do projektu lub zobacz https://go.microsoft.com/fwlink/?linkid=851728, aby poznać dodatkowe wzorce obsługiwane w czasie projektowania.”

W ten sposób został rozwiązany mój problem. Uruchom poniższe polecenie, gdy jesteś w katalogu rozwiązania

 dotnet ef migrations add InitialMigration --project "Blog.Infrastructure" --startup-project "Blog.Appication"

Tutaj Aplikacja jest moim projektem startowym zawierającym klasę Startup.cs, a infrastruktura to mój projekt zawierający klasę DbContext.

następnie uruchom aktualizację przy użyciu tej samej struktury.

dotnet ef database update --project "Blog.Infrastructure" --startup-project "Blog.Application"

0

Mam ten sam problem, odkąd odnosiłem się do starego - Microsoft.EntityFrameworkCore.Tools.DotNet

<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.0" />

Po aktualizacji do nowszej wersji problem został rozwiązany


0

W pliku appsettings.json głównego projektu ustawiłem „Kopiuj do katalogu wyjściowego” na „Kopiuj zawsze” i zadziałało.


0

Przykładowa klasa kontekstu bazy danych dla aplikacji konsolowych .net core

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.Extensions.Configuration;
using System.IO;

namespace EmailServerConsole.Data
{
    public class EmailDBContext : DbContext
    {
        public EmailDBContext(DbContextOptions<EmailDBContext> options) : base(options) { }
        public DbSet<EmailQueue> EmailsQueue { get; set; }
    }

    public class ApplicationContextDbFactory : IDesignTimeDbContextFactory<EmailDBContext>
    {
        EmailDBContext IDesignTimeDbContextFactory<EmailDBContext>.CreateDbContext(string[] args)
        {
            IConfigurationRoot configuration = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json")
                .Build();
            var builder = new DbContextOptionsBuilder<EmailDBContext>();
            var connectionString = configuration.GetConnectionString("connection_string");
            builder.UseSqlServer(connectionString);
            return new EmailDBContext(builder.Options);
        }
    }
}

Chociaż może to odpowiedzieć na pytanie autorów, brakuje w nim słów wyjaśniających i linków do dokumentacji. Fragmenty surowego kodu nie są zbyt pomocne bez niektórych fraz dookoła. Może się również okazać, że bardzo pomocne może być napisanie dobrej odpowiedzi . Zmień swoją odpowiedź.
cześć

0

Możesz również użyć w konstruktorze klasy startowej, aby dodać plik json (gdzie znajdują się parametry połączenia) do konfiguracji. Przykład:

    IConfigurationRoot _config;
    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json");

        _config = builder.Build();
    }

0

Dla mnie to dlatego, że zmieniłem Output Typeprojekt startowy z Console Applicationna Class Library.

Wracając do załatwienia Console Applicationsprawy.


0

Miałem ten problem w rozwiązaniu, które ma:

  • projekt .NET Core 2.2 MVC
  • projekt .NET Core 3.0 Blazor
  • Kontekst bazy danych w projekcie biblioteki klas .NET Standard 2.0

Otrzymuję komunikat „nie można utworzyć obiektu ...”, gdy projekt Blazor jest ustawiony jako projekt startowy, ale nie, jeśli projekt MVC jest ustawiony jako projekt startowy.

To mnie zastanawia, ponieważ w konsoli Menedżera pakietów (gdzie tworzę migrację) mam domyślny projekt ustawiony na bibliotekę klas C #, która faktycznie zawiera kontekst bazy danych, a także określam kontekst bazy danych w moje wezwanie do migracji dodatków add-migration MigrationName -context ContextName, więc wydaje się dziwne, że Visual Studio dba o to, jaki projekt startowy jest obecnie ustawiony.

Domyślam się, że powodem jest to, że gdy projekt Blazor jest projektem startowym, PMC określa wersję .NET na Core 3.0 z projektu startowego, a następnie próbuje użyć tego do uruchomienia migracji w klasie .NET Standard 2.0 Biblioteka i uderzenie w jakiś konflikt.

Niezależnie od przyczyny, zmiana projektu startowego na projekt MVC, który jest przeznaczony dla Core 2.2, zamiast projektu Blazor, rozwiązała problem


0

U mnie problem polegał na tym, że uruchamiałem polecenia migracji w niewłaściwym projekcie. Uruchomienie poleceń wewnątrz projektu, który zawierał plik Startup.cs, a nie projektu zawierającego DbContext, pozwoliło mi przejść przez ten konkretny problem.


0

W moim przypadku pomaga ustawienie projektu StartUp w init. Możesz to zrobić, wykonując

dotnet ef migrations add init -s ../StartUpProjectName

-4

Miałem ten sam problem. Po prostu zmieniłem ap.jason na application.jason i rozwiązano problem

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.