Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

1.8K
Visualizações
Ocurrió un error al acceder a los servicios de Microsoft.Extensions.Hosting cuando se realizan las primeras migraciones

no entiendo que falla. Traté de hacer un crud simple en .net core mvc con un modelo muy simple que tiene pocos campos.

Estos son mis modelos:

 public class Employee { [Key] public int EmployeeId { get; set; } [Required] public string FistName { get; set; } [Required] public string LastName { get; set; } public int PositionId { get; set; } public virtual Position Position { get; set; } } public class Position { [Key] public int PositionId { get; set; } public string PositionName { get; set; } public ICollection<Employee> Employees { get; set; } }

luego hice el contexto de la aplicación:

 public class EmployeeContext : DbContext { public EmployeeContext(DbContextOptions<EmployeeContext> options) : base(options) { } public DbSet<Employee> Employees { get; set; } public DbSet<Position> Positions { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Employee>() .HasOne(e => e.Position) .WithMany() .HasForeignKey(e => e.PositionId); } }

y contexto registrado en Startup.cs:

 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.AddDbContext<EmployeeContext>(item =>item.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); }

puede ser necesario un código de archivo más de .csproj y program.cs

 <Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>net461</TargetFramework> <DebugType>full</DebugType> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore" Version="2.2.0" /> <PackageReference Include="Microsoft.AspNetCore.CookiePolicy" Version="2.2.8" /> <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" /> <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.2.0" /> <PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.2" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.1.2"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference> <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.2" /> <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer.Design" Version="1.1.6" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.2"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference> <PackageReference Include="Microsoft.Extensions.Logging.Configuration" Version="3.1.2" /> <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.1" /> </ItemGroup> </Project> public class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>(); }

luego intenté migrar primero, pero veo un error muy extraño Add-Migration FirstInit -verbose

 Using project 'Crud'. Using startup project 'Crud'. Build started... Build succeeded. C:\.nuget\packages\microsoft.entityframeworkcore.tools\3.1.2\tools\net461\win-x86\ef.exe migrations add FirstInit --json --verbose --no-color --prefix-output --assembly C:\source\repos\Crud\Crud\bin\Debug\net461\Crud.exe --startup-assembly C:\source\repos\Crud\Crud\bin\Debug\net461\Crud.exe --project-dir C:\source\repos\Crud\Crud\ --language C# --working-dir C:\source\repos\Crud --root-namespace Crud Using assembly 'Crud'. Using startup assembly 'Crud'. Using application base 'C:\source\repos\Crud\Crud\bin\Debug\net461'. Using working directory 'C:\source\repos\Crud\Crud'. Using root namespace 'Crud'. Using project directory 'C:\source\repos\Crud\Crud\'. Using configuration file 'C:\source\repos\Crud\Crud\bin\Debug\net461\Crud.exe.config'. Using assembly 'Crud'. Using startup assembly 'Crud'. Using application base 'C:\source\repos\Crud\Crud\bin\Debug\net461'. Using working directory 'C:\source\repos\Crud\Crud'. Using root namespace 'Crud'. Using project directory 'C:\source\repos\Crud\Crud\'. Finding DbContext classes... Finding IDesignTimeDbContextFactory implementations... Finding application service provider... Finding Microsoft.Extensions.Hosting service provider... Using environment 'Development'. System.TypeLoadException: There is no implementation of the GetItem method in the type "Microsoft.AspNetCore.Mvc.Razor.Internal.FileProviderRazorProjectFileSystem" from assembly "Microsoft.AspNetCore.Mvc.Razor, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60". в Microsoft.Extensions.DependencyInjection.MvcRazorMvcCoreBuilderExtensions.AddRazorViewEngineServices(IServiceCollection services) в Microsoft.Extensions.DependencyInjection.MvcRazorMvcCoreBuilderExtensions.AddRazorViewEngine(IMvcCoreBuilder builder) в Microsoft.Extensions.DependencyInjection.MvcServiceCollectionExtensions.AddMvc(IServiceCollection services) в Crud.Startup.ConfigureServices(IServiceCollection services) в C:\source\repos\Crud\Crud\Startup.cs:строка 38 --- End the stack trace from the previous location where the exception occurred --- в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() в Microsoft.AspNetCore.Hosting.ConventionBasedStartup.ConfigureServices(IServiceCollection services) в Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureApplicationServices() в Microsoft.AspNetCore.Hosting.Internal.WebHost.Initialize() в Microsoft.AspNetCore.Hosting.WebHostBuilder.Build() An error occurred while accessing the Microsoft.Extensions.Hosting services. Continuing without the application service provider. Error: There is no implementation of the GetItem method in the type "Microsoft.AspNetCore.Mvc.Razor.Internal.FileProviderRazorProjectFileSystem" from assembly "Microsoft.AspNetCore.Mvc.Razor, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60". No application service provider was found. Finding DbContext classes in the project... Found DbContext 'EmployeeContext'. Microsoft.EntityFrameworkCore.Design.OperationException: Unable to create an object of type 'EmployeeContext'. For the different patterns supported at design time, see https://go.microsoft.com/fwlink/?linkid=851728 ---> System.MissingMethodException:There are no parameterless constructors defined for this object.. в System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) в System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) в System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) в System.Activator.CreateInstance(Type type, Boolean nonPublic) в System.Activator.CreateInstance(Type type) в Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.<>c__DisplayClass13_3.<FindContextTypes>b__13() --- End trace of internal exception stack --- в Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.<>c__DisplayClass13_3.<FindContextTypes>b__13() в Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(Func`1 factory) в Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(String contextType) в Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.AddMigration(String name, String outputDir, String contextType) в Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigrationImpl(String name, String outputDir, String contextType) в Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigration.<>c__DisplayClass0_0.<.ctor>b__0() в Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.<>c__DisplayClass3_0`1.<Execute>b__0() в Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action) Unable to create an object of type 'EmployeeContext'. For the different patterns supported at design time, see https://go.microsoft.com/fwlink/?linkid=851728

¿Qué hay de malo en estas 3 líneas?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

EF llama a CreateWebHostBuilder o BuildWebHost sin ejecutar Main. Entonces Iconfiguration es nulo.

Cree una nueva clase que heredó de IDesignTimeDbContextFactory .

 public class YourDbContext : DbContext { //Dbcontext implementation } public class YourDbContextFactory : IDesignTimeDbContextFactory<YourDbContext> { public YourDbContext CreateDbContext(string[] args) { var optionsBuilder = new DbContextOptionsBuilder<YourDbContext>(); optionsBuilder.UseSqlServer("your connection string"); return new YourDbContext(optionsBuilder.Options); } }

Está utilizando un nuevo EF de .net core que usa IHostBuilder (en una versión anterior como la suya, el proveedor es IWebHostBuilder). Las herramientas primero intentan obtener el proveedor de servicios invocando Program.CreateHostBuilder(), llamando a Build() y luego accediendo a la propiedad Services. Puede obtener más información sobre la creación de DbContext en tiempo de diseño desde aquí

Puede ocurrir debido a una condición en su archivo de inicio o mientras se está inyectando. por ejemplo, tiene un indicador que verifica si alguna variable en la configuración de la aplicación es verdadera para usar la instancia de la base de datos en memoria.

EF necesita construir el modelo y usar DbContext sin iniciar la aplicación. Cuando EF invoca métodos, sus servicios de configuración siguen siendo nulos, por eso aparece un error.

Asegúrate de haber instalado el paquete.

Microsoft.EntityFrameworkCore.Herramientas

over 4 years ago · Santiago Trujillo Relatório

0

Como sugirió la respuesta aceptada :

EF llama a CreateWebHostBuilder o BuildWebHost sin ejecutar Main. Entonces Iconfiguration es nulo.

Pero en lugar de usar una fábrica más compleja, puede usar esta solución simple anulando OnConfiguring .

 public class ApplicationDbContext : DbContext { public ApplicationDbContext() { } public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (!optionsBuilder.IsConfigured) { optionsBuilder.UseSqlServer("Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=Chinook"); } }

* Preste atención por no usar la cadena de conexión db dentro del código fuente (docs)

 dotnet user-secrets set ConnectionStrings:Chinook "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Chinook" dotnet ef dbcontext scaffold Name=ConnectionStrings:Chinook Microsoft.EntityFrameworkCore.SqlServer

también preste atención a usar solo un \ en la línea de comando cli.

over 4 years ago · Santiago Trujillo Relatório

0

Mi experiencia con este error en particular tiene mucho que ver con ejecutar PowerShell y no establecer la variable de entorno adecuada para ASPNETCORE_ENVIRONMENT.

 $env:ASPNETCORE_ENVIRONMENT = "Development"

Luego:

Añadir-Migración...
Actualizar base de datos...
etc...

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda