Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

875
Views
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 answers
Answer question

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 Report

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!