Установлено внедрение зависимостей в консольном приложении .NET Core для ошибки службы EF Core DbContext. ⇐ C#
Установлено внедрение зависимостей в консольном приложении .NET Core для ошибки службы EF Core DbContext.
Я создал консольное приложение .net Core и добавил следующий пакет внедрения зависимостей:
Microsoft.Extensions.DependencyInjection
Чтобы внедрить службу EF Core DbContext, вот фрагмент кода проекта:
static void Main(string[] args) { // Создаём коллекцию сервисов и настраиваем наши сервисы вар услуги = ConfigurationServices(); // Генерируем провайдера вар serviceProvider = Services.BuildServiceProvider(); // Начинаем наш настоящий код serviceProvider.GetService().Run(); } общедоступная статическая IConfiguration LoadConfiguration() { вар строитель = новый ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", необязательно: false, reloadOnChange: true) .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Производство"}.json", необязательно: true) .AddEnvironmentVariables(); вернуть строитель.Build(); } частный статический IServiceCollection ConfigurationServices() { Услуги IServiceCollection = новый ServiceCollection(); // Настраиваем объекты, которые нам нужны, чтобы попасть в настройки конфигурации конфигурация вар = LoadConfiguration(); // ВАЖНЫЙ! Зарегистрируйте наш файл cvonfig, строку подключения к базе данных и точку входа приложения (запуск) услуги .AddSingleton(конфигурация) .AddConnection(конфигурация) .AddStartup(); услуги возврата; } КЛАСС пула услуг:
общедоступный статический класс ServicesPool { общедоступный статический IServiceCollection AddStartup (это службы IServiceCollection) { Services.AddTransient(); услуги возврата; } общедоступный статический IServiceCollection AddConfiggguration (это службы IServiceCollection, конфигурация IConfiguration) { Services.AddSingleton(конфигурация); услуги возврата; } общедоступный статический IServiceCollection AddConnection (это службы IServiceCollection, конфигурация IConfiguration) { var Connection = Configuration.GetConnectionString("DEV_CS"); Services.AddDbContext(параметры => options.UseSqlServer(connection, b => b.MigrationsAssembly("migration.presentence"))); услуги возврата; } } Служба MigrationDbContext, реализующая DbContext из EntityFramwork Core:
публичный класс MigrationDbContext: DbContext { public MigrationDbContext(DbContextOptions dbContextOptions): база(dbContextOptions) { } общественный DbSet RootItems {get; набор; } } Приложение работает без проблем, но когда я пытаюсь создать первоначальную миграцию с помощью следующей команды:
Добавить миграцию «Начальная»
Произошла ошибка со следующим сообщением:
Невозможно создать объект типа «MigrationDbContext». Для различные шаблоны, поддерживаемые во время разработки, см. https://go.microsoft.com/fwlink/?linkid=851728
Я изучал проблему и пробовал несколько решений, но пока не смог ее решить. Поэтому я собираюсь поделиться трассировкой стека ошибки, надеясь получить от вас помощь!
Трассировка стека:
PM> Добавить-Миграция «Начальная» -verbos Использование проекта 'миграция.присутствие'. Использование стартап-проекта «e-commerce.migration». Сборка началась... Сборка выполнена успешно. C:\Program Files\dotnet\dotnet.exe exec --depsfile C:\dev\backlogheros\e-commerce.migration\e-commerce.migration\bin\Debug\netcoreapp5.0\e-commerce.migration.deps.json --additionalprobingpath C:\Users\yousi.nuget\packages --runtimeconfig C:\dev\backlogheros\e-commerce.migration\e-commerce.migration\bin\Debug\netcoreapp5.0\e-commerce.migration.runtimeconfig .json C:\Users\yousi.nuget\packages\microsoft.entityframeworkcore.tools\5.0.1\tools\netcoreapp2.0\any\ef.dll миграции добавляют Начальный --json --verbose --no-color --prefix-output --assembly C:\dev\backlogheros\e-commerce.migration\e-commerce.migration\bin\Debug\netcoreapp5.0\migration.presentence.dll --startup-assembly C:\dev\backlogheros\e-commerce.migration\e-commerce.migration\bin\Debug\netcoreapp5.0\e-commerce.migration.dll --project-dir C:\dev\backlogheros\e-commerce.migration\migration.presentence
--language C# --working-dir C:\dev\backlogheros\e-commerce.migration --root-namespacemigration.presentence Использование сборки "migration.presentence". Использование стартовой сборки «электронная коммерция.миграция». Использование базы приложений 'C:\dev\backlogheros\e-commerce.migration\e-commerce.migration\bin\Debug\netcoreapp5.0'. Использование рабочего каталога 'C:\dev\backlogheros\e-commerce.migration\e-commerce.migration'. С использованием корневое пространство имен «миграция.презентация». Использование каталога проекта «C:\dev\backlogheros\e-commerce.migration\migration.presentence». Остальные аргументы: . Поиск классов DbContext... Поиск Реализации IDesignTimeDbContextFactory... Поиск приложения поставщик услуг в сборке «e-commerce.migration»... Поиск Поставщик услуг Microsoft.Extensions.Hosting... Нет статического метода «CreateHostBuilder(string[])» найден в классе «Программа». Нет Был найден поставщик услуг приложений. Поиск классов DbContext в проект... Найден DbContext «MigrationDbContext». Microsoft.EntityFrameworkCore.Design.OperationException: невозможно создайте объект типа «MigrationDbContext». Для разных шаблоны, поддерживаемые во время разработки, см. https://go.microsoft.com/fwlink/?linkid=851728 ---> System.InvalidOperationException: невозможно разрешить службу для типа «Microsoft.EntityFrameworkCore.DbContextOptions» при попытке активируйте «migration.presentence.MigrationDbContext».
в Microsoft.Extensions.DependencyInjection.ActivatorUtilities.ConstructorMatcher.CreateInstance (поставщик IServiceProvider) в Microsoft.Extensions.DependencyInjection.ActivatorUtilities.CreateInstance (поставщик IServiceProvider, тип экземпляраType, параметры Object[]) в Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetServiceOrCreateInstance (поставщик IServiceProvider, тип типа) в Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.c__DisplayClass13_4.b__13() --- Конец внутренней трассировки стека исключений --- в Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.c__DisplayClass13_4.b__13() в Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext (фабрика Func`1) в Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(String contextType) в Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.AddMigration (имя строки, String outputDir, String contextType, String namespace) в Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigrationImpl (имя строки, String outputDir, String contextType, String namespace) в Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigration.c__DisplayClass0_0.b__0() в Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.c__DisplayClass3_0`1.b__0() в Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute (Действие-действие)
Я создал консольное приложение .net Core и добавил следующий пакет внедрения зависимостей:
Microsoft.Extensions.DependencyInjection
Чтобы внедрить службу EF Core DbContext, вот фрагмент кода проекта:
static void Main(string[] args) { // Создаём коллекцию сервисов и настраиваем наши сервисы вар услуги = ConfigurationServices(); // Генерируем провайдера вар serviceProvider = Services.BuildServiceProvider(); // Начинаем наш настоящий код serviceProvider.GetService().Run(); } общедоступная статическая IConfiguration LoadConfiguration() { вар строитель = новый ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", необязательно: false, reloadOnChange: true) .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Производство"}.json", необязательно: true) .AddEnvironmentVariables(); вернуть строитель.Build(); } частный статический IServiceCollection ConfigurationServices() { Услуги IServiceCollection = новый ServiceCollection(); // Настраиваем объекты, которые нам нужны, чтобы попасть в настройки конфигурации конфигурация вар = LoadConfiguration(); // ВАЖНЫЙ! Зарегистрируйте наш файл cvonfig, строку подключения к базе данных и точку входа приложения (запуск) услуги .AddSingleton(конфигурация) .AddConnection(конфигурация) .AddStartup(); услуги возврата; } КЛАСС пула услуг:
общедоступный статический класс ServicesPool { общедоступный статический IServiceCollection AddStartup (это службы IServiceCollection) { Services.AddTransient(); услуги возврата; } общедоступный статический IServiceCollection AddConfiggguration (это службы IServiceCollection, конфигурация IConfiguration) { Services.AddSingleton(конфигурация); услуги возврата; } общедоступный статический IServiceCollection AddConnection (это службы IServiceCollection, конфигурация IConfiguration) { var Connection = Configuration.GetConnectionString("DEV_CS"); Services.AddDbContext(параметры => options.UseSqlServer(connection, b => b.MigrationsAssembly("migration.presentence"))); услуги возврата; } } Служба MigrationDbContext, реализующая DbContext из EntityFramwork Core:
публичный класс MigrationDbContext: DbContext { public MigrationDbContext(DbContextOptions dbContextOptions): база(dbContextOptions) { } общественный DbSet RootItems {get; набор; } } Приложение работает без проблем, но когда я пытаюсь создать первоначальную миграцию с помощью следующей команды:
Добавить миграцию «Начальная»
Произошла ошибка со следующим сообщением:
Невозможно создать объект типа «MigrationDbContext». Для различные шаблоны, поддерживаемые во время разработки, см. https://go.microsoft.com/fwlink/?linkid=851728
Я изучал проблему и пробовал несколько решений, но пока не смог ее решить. Поэтому я собираюсь поделиться трассировкой стека ошибки, надеясь получить от вас помощь!
Трассировка стека:
PM> Добавить-Миграция «Начальная» -verbos Использование проекта 'миграция.присутствие'. Использование стартап-проекта «e-commerce.migration». Сборка началась... Сборка выполнена успешно. C:\Program Files\dotnet\dotnet.exe exec --depsfile C:\dev\backlogheros\e-commerce.migration\e-commerce.migration\bin\Debug\netcoreapp5.0\e-commerce.migration.deps.json --additionalprobingpath C:\Users\yousi.nuget\packages --runtimeconfig C:\dev\backlogheros\e-commerce.migration\e-commerce.migration\bin\Debug\netcoreapp5.0\e-commerce.migration.runtimeconfig .json C:\Users\yousi.nuget\packages\microsoft.entityframeworkcore.tools\5.0.1\tools\netcoreapp2.0\any\ef.dll миграции добавляют Начальный --json --verbose --no-color --prefix-output --assembly C:\dev\backlogheros\e-commerce.migration\e-commerce.migration\bin\Debug\netcoreapp5.0\migration.presentence.dll --startup-assembly C:\dev\backlogheros\e-commerce.migration\e-commerce.migration\bin\Debug\netcoreapp5.0\e-commerce.migration.dll --project-dir C:\dev\backlogheros\e-commerce.migration\migration.presentence
--language C# --working-dir C:\dev\backlogheros\e-commerce.migration --root-namespacemigration.presentence Использование сборки "migration.presentence". Использование стартовой сборки «электронная коммерция.миграция». Использование базы приложений 'C:\dev\backlogheros\e-commerce.migration\e-commerce.migration\bin\Debug\netcoreapp5.0'. Использование рабочего каталога 'C:\dev\backlogheros\e-commerce.migration\e-commerce.migration'. С использованием корневое пространство имен «миграция.презентация». Использование каталога проекта «C:\dev\backlogheros\e-commerce.migration\migration.presentence». Остальные аргументы: . Поиск классов DbContext... Поиск Реализации IDesignTimeDbContextFactory... Поиск приложения поставщик услуг в сборке «e-commerce.migration»... Поиск Поставщик услуг Microsoft.Extensions.Hosting... Нет статического метода «CreateHostBuilder(string[])» найден в классе «Программа». Нет Был найден поставщик услуг приложений. Поиск классов DbContext в проект... Найден DbContext «MigrationDbContext». Microsoft.EntityFrameworkCore.Design.OperationException: невозможно создайте объект типа «MigrationDbContext». Для разных шаблоны, поддерживаемые во время разработки, см. https://go.microsoft.com/fwlink/?linkid=851728 ---> System.InvalidOperationException: невозможно разрешить службу для типа «Microsoft.EntityFrameworkCore.DbContextOptions» при попытке активируйте «migration.presentence.MigrationDbContext».
в Microsoft.Extensions.DependencyInjection.ActivatorUtilities.ConstructorMatcher.CreateInstance (поставщик IServiceProvider) в Microsoft.Extensions.DependencyInjection.ActivatorUtilities.CreateInstance (поставщик IServiceProvider, тип экземпляраType, параметры Object[]) в Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetServiceOrCreateInstance (поставщик IServiceProvider, тип типа) в Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.c__DisplayClass13_4.b__13() --- Конец внутренней трассировки стека исключений --- в Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.c__DisplayClass13_4.b__13() в Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext (фабрика Func`1) в Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(String contextType) в Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.AddMigration (имя строки, String outputDir, String contextType, String namespace) в Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigrationImpl (имя строки, String outputDir, String contextType, String namespace) в Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigration.c__DisplayClass0_0.b__0() в Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.c__DisplayClass3_0`1.b__0() в Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute (Действие-действие)
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Внедрение зависимостей работает в API, но не работает в консольном приложении .net 8.
Anonymous » » в форуме C# - 0 Ответы
- 18 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Внедрение зависимостей работает в API, но не работает в консольном приложении .NET 8.
Anonymous » » в форуме C# - 0 Ответы
- 12 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Внедрение зависимостей работает в API, но не работает в консольном приложении .NET 8.
Anonymous » » в форуме C# - 0 Ответы
- 8 Просмотры
-
Последнее сообщение Anonymous
-