webentwicklung-frage-antwort-db.com.de

asp.net core 2.0 - Wert darf nicht null sein. Parametername: connectionString

Ich hatte beim Hinzufügen von Migration den folgenden Fehler in der Paket-Manager-Konsole

Der Wert kann nicht Null sein. Parametername: connectionString

Dies ist mein Startup:

namespace MyProject
{
    public class Startup
    {
        public IConfiguration Configuration { get; set; }
        public Startup(IConfiguration config)
        {
            Configuration = config;
        }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContextPool<AppDbContext>(options =>
                             options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
            services.AddTransient<IDevRepo, DevRepo>();
            services.AddMvc();
            services.AddMemoryCache();
            services.AddSession();
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            app.UseStatusCodePages();
            app.UseStaticFiles();
            app.UseMvcWithDefaultRoute();
            app.Run(async (context) =>
            {
                await context.Response.WriteAsync(Configuration["Message"]);
            });
        }
    }
}

programmklasse:

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

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration((context, builder) => builder.SetBasePath(context.HostingEnvironment.ContentRootPath)
                       .AddJsonFile("appsettings.json")
                       .Build())

            .UseStartup<Startup>()
            .Build();
}

appsettings.json:

{
  "Message": "Hello World",
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;Database=NotMyFault;Trusted_Connection=True;MultipleActiveResultSets=true"
  }
}

Interessanterweise wird beim Ausführen der App "Hello World" angezeigt. Beim Hinzufügen der Migration wird jedoch connectionString nicht gefunden. Kann jemand bitte ein paar Lichter hier werfen? Vielen Dank.

18
Bing Han

Ich habe mein eigenes Problem gefunden.

Ich habe eine AppDbContextFactory-Klasse, die IDesignTimeDbContextFactory erbt. Das Löschen dieser Klasse behebt dieses Problem. 

1
Bing Han

Dieses Problem trat auf, wenn der Verbindungsstring nicht gefunden wurde.

Wahrscheinlich haben Sie in der Startup-Klasse folgende Codes:

public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<BenchmarkContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("yourConnectionString name from appsettings.json")));
    }

Diese Methoden lösen dein Problem :

1- Anstelle von Configuration.GetConnectionString("yourConnectionString name from appsettings.json") setzen Sie einfach Ihren Verbindungsstring.

public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<BenchmarkContext>(options =>
  options.UseSqlServer("Data Source=.;Initial Catalog=Benchmark;Persist Security Info=True;User ID=****;Password=****"));
    }

2- Wenn Sie die Konfigurationsdatei verwenden, fügen Sie der Startklasse folgende Codes hinzu:

public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }
public IConfiguration Configuration;

public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<BenchmarkContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("TestConnection")));
    }

Appsetting.json-Datei:

{
  "ConnectionStrings": {
    "TestConnection": "Data Source=.;Initial Catalog=Benchmark;Persist Security Info=True;User ID=****;Password=****"
  }
}

Anschließend führen Sie den Befehl 'add-migration name' in der Package Manager Console aus

15
Iman Bahrampour

Ich hatte das gleiche Problem, aber meine Lösung war viel einfacher. Ich habe nur die Reihenfolge der appsettings.json geändert von:

{
  "Message": "Hello World",
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;Database=NotMyFault;Trusted_Connection=True;MultipleActiveResultSets=true"
  }
}

zu:

{
   "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;Database=NotMyFault;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
  "Message": "Hello World"
}

Ich habe den Verdacht, dass die Datei appsettings.json eine Reihenfolge/Reihenfolge von Parametern enthält.

6
Jay

Ich hatte das gleiche Problem, weil ich den Standardwert in Startup.cs ..__ verwendete. Ich habe gerade die Konfigurationseigenschaft von bearbeitet:

public IConfiguration Configuration { get; }

zu:

public IConfiguration Configuration;

und es hat funktioniert! Wenn jemand sagt warum, würde es uns freuen.

2
Sharif Yazdian

Ich hatte aus den folgenden Gründen ein ähnliches Problem:

  • appsettings.json war nicht im Projekt enthalten
  • Ich habe das Projekt von dem Pfad aus ausgeführt, der keine appsettings.json enthielt
2
bigyanshr

Möglicherweise liegt das Problem bei Ihrer DotNetCliToolReference aus der Datei csproj. Wenn Sie das Projekt von einer älteren Version des asp.net-Kerns migrieren, wird die DotNetCliToolReference nicht automatisch aktualisiert. Aktualisieren Sie die Datei yourproject.csproj, um die 2.0.0-Version der CLI zu verwenden, wie im folgenden Ausschnitt gezeigt:

<ItemGroup>

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

Führen Sie aus dem Projektordner den Befehl dotnet erneut mit der Option -v aus, um die Ergebnisse anzuzeigen

dotnet ef database update -v

Überprüfen Sie außerdem Ihre Microsoft.EntityFrameworkCore-Nuget-Pakete, um auf die Version 2.0.0 zu verweisen. Entfernen oder aktualisieren Sie ältere EF-Pakete. Das Minimum ist:

  • Microsoft.EntityFrameworkCore.SqlServer

  • Microsoft.EntityFrameworkCore.Design

beide 2.0.0 zu diesem Zeitpunkt.

2
Mircea Matei

Ich hatte ein ähnliches Problem, nachdem ich versucht hatte, ein neues Projekt für ASP.NET Core 2.0 Web Api zu verwenden. Soweit ich gefunden habe, war die Ursache des Problems, dass die für die Entwicklungsumgebung angegebenen Anwendungseinstellungen nicht hinzugefügt wurden. Ich habe es behoben, indem ich die Startdatei folgendermaßen aktualisiert habe: 

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
        .AddEnvironmentVariables();
    this.Configuration = builder.Build();
}

In meinem Fall sieht die Programmklasse folgendermaßen aus:

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

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

Ich hatte das gleiche Problem und woran es liegt, musste ich sicherstellen, dass der Name der Verbindung übereinstimmt:

      services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        services.AddDbContext<MyContext>(options => options.UseSqlServer(Configuration["ConnectionStrings:DefaultConnection"]));

welche **** ConnectionStrings: DefaultConnection *** dort hatte ich das ganze problem. Stellen Sie sicher, dass dies in Startup.cs und appsettings.json identisch ist (appsettings.Development.json in Version 2019).

Nachdem ich das behoben hatte, war alles in Ordnung.

0
Carolina R

Wenn Sie zuvor Ihre Verbindungszeichenfolge in appsettings-Datei umbenannt haben und die Umbenennung in der DesignTimeDbContextFactory-Klasse (wenn Sie sie in Ihrem Projekt haben) ausgelassen hat und dies vom Entity-Framework geprüft wird, können Sie dieses Problem ausführen.

0
Sami-L

Wenn Sie eine IDesignTimeDbContextFactory verwenden, müssen Sie einen Standardkonstruktor ohne Parameter hinzufügen. Versuchen Sie so etwas:

public DbContextFactory()
{
    IConfigurationRoot configuration = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddEnvironmentVariables()
        .AddJsonFile("appsettings.json", false, true)
        .Build();

    _connectionString = configuration.GetConnectionString("ConnectionStringName");
}
0
Tyler Findlay

Ich hatte ein solches Problem beim Laden des Dienstes (ich empfehle es allen) und hatte ~ 3/1000 Anfragen mit Fehlern, .__ 

services.AddDbContextPool<AppDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

zu

string connectionString = Configuration.GetConnectionString("DefaultConnection");
services.AddDbContextPool<AppDbContext>(options =>
options.UseSqlServer(connectionString));

Es liest also die Verbindungszeichenfolge 1 Mal und verwendet nicht für jede Anforderung die Konfiguration. Und jetzt sind 100% -Anfragen erfolgreich ... Aber es scheint ein Fehler in .NET Core zu sein

0
Pavel Biryukov

Mein Problem war, als ich versuchte, App.dll im Ordner netcoreapp2.1 auszuführen, aber der richtige Ordner ist netcoreapp2.1\publish \.

0
Liam Kernighan

Ich habe mein Problem durch Setzen des rechten Basispfads gelöst. Das Problem ist, dass bei den Migrationen oder bei anderen Paketen ein falscher Pfad zur Datei appsetting.json verwendet wird. Nicht sicher, ob es sich um ein offizielles Problem handelt.

Ich habe gerade meine Startup.cs wie folgt geändert:

public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true)
            .AddEnvironmentVariables();
        Configuration = builder.Build();
    }

Danach müssen Sie lediglich Ihre appsettings.json an die richtige Stelle kopieren, wenn sie dort fehlt.

0
ADM-IT

Das funktionierte einwandfrei für mich: 

public IConfiguration Configuration;
public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext.ApplicationDbContext>(options => 
            //options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
            options.UseSqlServer("Server=serverAddress; Database=dbName; user=username; password=pswd"));
}

Der kommentierte Teil dient nur als Referenz, wo ersetzt werden soll. 

0
H35am

In einem anderen Szenario können Sie die Konfiguration festlegen. Setzen Sie die Verbindungszeichenfolge in appsettings.jso n anstelle von appsettings.Development.json

0
aads