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 в нужное место, если он отсутствует там.