Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

873
Vistas
Se usó una cadena de conexión con nombre, pero no se encontró el nombre 'DefaultConnection' en la configuración de la aplicación

Tengo un DbContext llamado FileManagerContext en mi API DOTNET 6:

 public class FileManagerContext : DbContext { public FileManagerContext(DbContextOptions<FileManagerContext> options) : base(options) { } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.ApplyConfigurationsFromAssembly(GetType().Assembly); } }

Es un DbContext bastante simple con una Entidad simple. De todos modos, también tengo este appsettings.json :

 { "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "ConnectionStrings": { "DefaultConnection": "Server=localhost;Database=FM;User=SA;Password=1234;" }, "AllowedHosts": "*" }

Y aquí está el fragmento de código de inicio en la declaración de nivel superior de Program.cs :

 var builder = WebApplication.CreateBuilder(args); builder.Services.AddDbContext<FileManagerContext>( opt => opt.UseSqlServer("name=DefaultConnection"));

Podría usar migraciones en el caso. Todo va bien. Puedo agregar migraciones y puedo actualizar la base de datos con éxito. Pero cuando ejecuto la aplicación e intento usar DbContext , aparece este error:

System.InvalidOperationException: se usó una cadena de conexión con nombre, pero no se encontró el nombre 'DefaultConnection' en la configuración de la aplicación. Tenga en cuenta que las cadenas de conexión con nombre solo se admiten cuando se usa 'IConfiguration' y un proveedor de servicios, como en una aplicación típica de ASP.NET Core. Consulte https://go.microsoft.com/fwlink/?linkid=850912 para obtener más información.

También he intentado obtener la cadena de conexión de esta manera:

 var cs = builder.Configuration.GetConnectionString("DefaultConnection");

Pero devuelve nulo. ¿Alguien puede ayudarme a través de por favor?

over 4 years ago · Santiago Trujillo
4 Respuestas
Responde la pregunta

0

Por los sonidos del error, es posible que su configuración no se esté recuperando.

¿Cómo se crea la configuración?

¿Ves que se llama al método de extensión AddConfiguration en Webhost? el contenido del método debería ser algo como lo siguiente:

 IConfiguration config = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", false, false) .AddJsonFile($"appsettings.{envLower}.json", true, true) .AddEnvironmentVariables() .Build();

La llamada a construir puede o no existir. Por lo general, creamos manualmente el objeto de configuración porque necesitamos construir los registradores y luego usar el método de extensión AddConfiguration para agregar ese objeto al host.

Si no ve eso, consulte la documentación de Microsoft para obtener instrucciones sobre cómo configurarlo. Documentación de configuración

Como alternativa, puede obtener la cadena de conexión a través del objeto de configuración y pasarla al método UseSqlServer.

 services.AddDbContext<FileManagerContext>((provider, options) => { IConfiguration config = provider.GetRequiredService<IConfiguration>(); string connectionString = config.GetConnectionString("DefaultConnection"); options.UseSqlServer(connectionString); });

en el método alternativo, se pasa un proveedor de servicios a la acción. Puede usar el proveedor para obtener el objeto IConfiguration del contenedor DI.

over 4 years ago · Santiago Trujillo Denunciar

0

No use "name=DefaultConnection" ya que se trata como un nombre de cadena de conexión que incluye "name="

Estoy usando esta sintaxis en program.cs y todo funciona correctamente

 var builder = WebApplication.CreateBuilder(args); ....... builder.Services.AddDbContext<FileManagerContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));

y dado que está utilizando Ms Sql Server, la cadena de conexión para el servidor sql suele ser así

 "DefaultConnection": "Data Source=xxxx;Initial catalog=xxx;Integrated Security=False;User ID=xxxx;Password=xxxx;"

y mi código OnConfiguring se ve así

 protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (!optionsBuilder.IsConfigured) { ...your code } }
over 4 years ago · Santiago Trujillo Denunciar

0

use builder.Configuration

 builder.Services.AddDbContext<FileManagerContext>(options => { options.UseSqlServer(builder.Configuration["ConnectionStrings:DefaultConnection"]); });

o builder.Configuration.GetConnectionString como menciona @Serge

 options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"));
over 4 years ago · Santiago Trujillo Denunciar

0

Gracias a @Neil lo descubrí. Las configuraciones no se cargaron en la aplicación. Pero, dado que estoy en las declaraciones de nivel superior de dotnet 6, agregar configuraciones parece un poco diferente del consejo de @Neil. Así que aquí está la solución de trabajo:

 builder.Services.AddControllers(); var currentDirectory = AppDomain.CurrentDomain.BaseDirectory; var environmentName = builder.Environment.EnvironmentName; builder.Configuration .SetBasePath(currentDirectory) .AddJsonFile("appsettings.json", false, true) .AddJsonFile($"appsettings.{environmentName}.json", true, true) .AddEnvironmentVariables(); // blah blah builder.Services.AddDbContext<FileManagerContext>( opt => opt.UseSqlServer("name=DefaultConnection"));
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda