asp.net core 2.0-значение не может быть null. Имя параметра: параметр connectionString

у меня была следующая ошибка в консоли диспетчера пакетов при Add-Migration

значение не может быть null. Имя параметра: параметр connectionString

Это мой стартап:

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"]);
            });
        }
    }
}

программы класс:

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"
  }
}

интересно, если я запускаю приложение, оно отображает "Hello World", но при добавлении миграции он не может найти connectionString. Кто-нибудь может пролить свет? Спасибо.

9 ответов


эта проблема возникла, когда connectionstring не может быть найден.

вероятно, у вас есть следующие коды в классе запуска:

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

эти методы решают вашу проблему:

1 - вместо Configuration.GetConnectionString("yourConnectionString name from appsettings.json") просто поместите connectionstring.

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

2 - Если вы собираетесь использовать файл конфигурации добавить эти коды в класс Startup:

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:

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

после этого выполните команду "add-migration name" в консоли диспетчера пакетов


вероятно, проблема с вашим DotNetCliToolReference из файла csproj. При переносе проекта из более старой версии asp.net ядро, DotNetCliToolReference не обновляется автоматически. Обновите yourproject.файл csproj для использования версии 2.0.0 CLI, как показано в приведенном ниже фрагменте:

<ItemGroup>

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

повторно запустите из папки проекта команду dotnet с переключателем-v, чтобы увидеть результаты

dotnet ef database update -v

кроме того, проверьте Microsoft.EntityFrameworkCore пакеты nuget для ссылки на версию 2.0.0. Удалите или обновите старые пакеты EF. Минимальными являются:

  • Microsoft.EntityFrameworkCore.От SQLServer

  • Microsoft.EntityFrameworkCore.Дизайн

оба 2.0.0 в данный момент.


у меня была такая же проблема, но мое решение было намного проще. Все, что я сделал, это изменил порядок appsettings.json from:

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

в:

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

у меня есть подозрение, что в appsettings есть последовательность/порядок параметров.файл json.


у меня была аналогичная проблема после попытки использовать новый созданный проект для ASP.NET Core 2.0 Web Api. Насколько я обнаружил, причиной проблемы было то, что параметры приложения, указанные для среды разработки, не были добавлены. Я исправил это, обновив файл запуска до следующего:

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();
}

в моем случае класс программы выглядит следующим образом:

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

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

у меня была такая же проблема, потому что я использовал значение по умолчанию Автозагрузка.cs. Я только что отредактировал свойство конфигурации из:

public IConfiguration Configuration { get; }

в:

public IConfiguration Configuration;

и это сработало! Если кто-то скажет, почему будет оценен.


У меня была аналогичная проблема по следующим причинам:

  • appsettings.json не был включен в проект
  • я запускал проект из пути, который не содержал appsettings.в JSON

Я нашел свою проблему.

У меня есть класс AppDbContextFactory, который наследует IDesignTimeDbContextFactory. Удаление этого класса устраняет эту проблему.


моя проблема была когда я пытался запустить приложение.dll в netcoreapp2.1 папка, но правой папкой является netcoreapp2.1 \ опубликовать\


Я решил свою проблему, установив правильный базовый путь. Проблема в том, что миграция или что-то еще из разных пакетов использует неправильный путь к набору приложений.файл json. Не уверен, что это официальный вопрос.

Я только что изменил свой запуск.CS следующим образом:

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();
    }

после этого вам просто нужно скопировать appsettings.json в нужное место, если он отсутствует там.