添加迁移时,包管理器控制台中出现以下错误
值不能为空。参数名称: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"
}
}
有趣的是,如果我运行应用程序,它会显示&#34; Hello World&#34;,但是当添加迁移时,它无法找到connectionString。有人可以在这里点灯吗?感谢。
答案 0 :(得分:16)
无法找到连接字符串时发生此问题。
您可能在启动课程中有以下代码:
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")
只是把你的连接字符串。
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<BenchmarkContext>(options =>
options.UseSqlServer("Data Source=.;Initial Catalog=Benchmark;Persist Security Info=True;User ID=****;Password=****"));
}
2-如果您要使用配置文件,请将这些代码添加到启动类:
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=****"
}
}
之后执行添加迁移名称&#39;包管理器控制台中的命令
答案 1 :(得分:7)
我遇到了同样的问题,但我的解决方案要简单得多。我所做的只是改变appsettings.json的顺序:
{
"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文件中有参数的顺序/顺序。
答案 2 :(得分:2)
我遇到了同样的问题,因为我使用的是 Startup.cs 中的默认值。 我刚刚从以下位置编辑了配置属性:
public IConfiguration Configuration { get; }
收件人:
public IConfiguration Configuration;
成功了! 如果有人说为什么会被感激。
答案 3 :(得分:2)
问题可能来自csproj文件中的DotNetCliToolReference。如果从较旧版本的asp.net核心迁移项目,则DotNetCliToolReference不会自动更新。 更新yourproject.csproj文件以使用CLI的2.0.0版本,如下面的代码段所示:
<ItemGroup>
...
<DotNetCliToolReference
Include="Microsoft.EntityFrameworkCore.Tools.DotNet"
Version="2.0.0" />
</ItemGroup>
从项目文件夹中重新运行带有-v开关的dotnet命令以查看结果
dotnet ef database update -v
此外,请重新检查Microsoft.EntityFrameworkCore nuget包以引用2.0.0版本。删除或更新旧的EF包。最低要求是:
Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.Design
此时此刻都是2.0.0。
答案 4 :(得分:2)
由于以下原因,我遇到了类似的问题:
答案 5 :(得分:2)
我有一个类似的问题。 appsettings.json
中有一个错字。将ConnectionsStrings
更改为ConnectionStrings
对我有用!
答案 6 :(得分:1)
在尝试为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();
}
答案 7 :(得分:1)
我发现了自己的问题。
我有一个继承IDesignTimeDbContextFactory的AppDbContextFactory类。删除此类可解决此问题。
答案 8 :(得分:1)
当我将“ .UseContentRoot”指定为当前进程路径时,我遇到了类似的问题。
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseUrls("http://*:3001")
.UseStartup<Startup>()
.UseContentRoot(Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName));
因此,在运行Add-Migration时,进程路径与项目bin路径不同,因此该进程找不到appsettings.json文件。 当我删除“ .UseContentRoot”行时,迁移成功
答案 9 :(得分:0)
检查服务器上是否正确设置了 $products = Product::withCount([
'orders as quantity' => function ($query) {
$query->select(DB::raw("sum(quantity)"));
}
])->orderBy('quantity')
->get();
变量。根据该环境,它可能采用 ASPNETCORE_ENVIRONMENT
而不是 appsettings.json
或 appsettings.Staging.json
。
答案 10 :(得分:0)
我很傻,有错字
{
"Conn*ce*tionStrings": {
"DefaultConnection": "Data source=***.db"
},
将其更改为
{
"ConnectionStrings": {
"DefaultConnection": "Data source=datingapp.db"
},
答案 11 :(得分:0)
由于connectionstring
文件的appsetting.json
和GetConnectionString(connectionstrings)
中的startup.cs
参数不同,我遇到了这个问题。一旦我在s
中删除了多余的startup.cs
,问题就消失了。
答案 12 :(得分:0)
我遇到了相同的错误,并通过将“ ConnectionStrings”移动为appsettings.json文件中的第一个变量来解决了该问题。
答案 13 :(得分:0)
我想我会补充一下对我来说。我遵循了一个流行的教程,将appsettings.json和依赖项注入添加到控制台应用程序。在安装程序中,我没有意识到它引用了当前目录,并使用该目录来设置配置构建器的基本路径。当我在本地运行时,它运行良好,但是当我尝试部署并让SQL计划的作业运行命令时,它将进入输入命令的目录,而不是DLL所在的目录,因此找不到我的目录。 appsettings.json文件。我只是删除了有关获取当前目录并将其设置为基本路径的行,并且工作正常。似乎它默认与DLL位于同一文件夹。
答案 14 :(得分:0)
对我来说,出于某种原因我拥有appSettings.json
而不是appsettings.json
(不确定VS是使用新创建的项目执行此操作,还是我将其重命名为该名称)。一旦我更改了名称,它就可以正常工作。
答案 15 :(得分:0)
我遇到了同样的问题,这是什么,我必须确保连接名称匹配:
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddDbContext<MyContext>(options => options.UseSqlServer(Configuration["ConnectionStrings:DefaultConnection"]));
其中**** ConnectionStrings:DefaultConnection ***是我遇到整个问题的地方。 确保在Startup.cs和appsettings.json(VS 2019中为appsettings.Development.json)中相同
我修复此问题后,一切都很好。
答案 16 :(得分:0)
如果使用的是IDesignTimeDbContextFactory,则需要向其添加不带参数的默认构造函数。尝试这样的事情:
public DbContextFactory()
{
IConfigurationRoot configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddEnvironmentVariables()
.AddJsonFile("appsettings.json", false, true)
.Build();
_connectionString = configuration.GetConnectionString("ConnectionStringName");
}
答案 17 :(得分:0)
可以在另一种情况下设置配置。在 appsettings.jso n中设置连接字符串,而不是在 appsettings.Development.json
中设置答案 18 :(得分:0)
在加载服务时遇到了此类问题(我向所有人推荐),并且有3/1000个请求有错误, 所以我改变了
services.AddDbContextPool<AppDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
到
string connectionString = Configuration.GetConnectionString("DefaultConnection");
services.AddDbContextPool<AppDbContext>(options =>
options.UseSqlServer(connectionString));
因此它会读取连接字符串1次,并且不会在每个请求上都使用Configuration。现在100%的请求已成功。 但这似乎是.Net Core中的错误
答案 19 :(得分:0)
如果您先前已在appsettings文件中先前重命名了连接字符串,并且省略了在DesignTimeDbContextFactory类中重命名连接字符串(如果您的项目中有此链接),并且已由Entity Framework检查,则您可能会在此问题中运行。
答案 20 :(得分:0)
这对我来说是完美的:
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"));
}
被注释的部分仅作为替换位置的参考。
答案 21 :(得分:0)
我已经通过设置正确的基本路径解决了我的问题。问题是从其他软件包进行迁移或其他任何操作都使用了错误的appsetting.json文件路径。不确定这是否是官方问题。
我刚刚按如下所示更改了Startup.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复制到正确的位置(如果缺少该位置)。
答案 22 :(得分:0)
我的问题是当我尝试在netcoreapp2.1文件夹中运行App.dll时,但正确的文件夹是netcoreapp2.1 \ publish \