我正在使用 Razor 页面编写 ASP.NET Core 项目,首先是数据库。
在 Power Console Manager 中执行
Scaffold-DbContext
命令后,正确创建了类和上下文,并且在运行程序后,从表中正确读取了数据。然后,我将连接字符串从 context
移至 appsettings
,并将连接字符串的名称移至上下文并替换连接字符串,在此步骤之后,一切仍然正常工作。
现在,在通过 SSMS 对表进行更改后,我再次运行
Scaffold-Dbcontext
以接收表的更改,并再次将连接字符串名称更改为上下文,但这一次是在运行程序并读取数据时从表中,我收到以下错误:
系统参数异常
H结果=0x80070057
Message=初始化字符串的格式不符合从索引 0 开始的规范。
总结:当连接字符串处于上下文中(如默认状态)时,它可以正常工作。 但是当我在上下文中保存连接字符串的名称时,遇到数据调用错误
我附上了目前情况的图片,请看一下并告诉我哪里做错了。 🤔
系统参数异常
H结果=0x80070057
Message=初始化字符串格式不符合 规范从索引 0 开始。
出现此错误通常是因为初始化字符串的格式不符合规范。在您的方法
optionsBuilder.UseSqlServer("connectionstring");
中,直接将“connectionstring”作为连接字符串传递给 UseSqlServer 方法,因此会出现错误。我重现了你的错误:
解决方案:
我们可以将 IConfiguration 对象注入到 DBContext 构造函数中,然后使用 IConfiguration 的
GetConnectionString
方法来获取连接字符串。这里有一个例子你可以参考:
public class WebApplication11Context : DbContext
{
private readonly IConfiguration _configuration;
public WebApplication11Context(IConfiguration configuration)
: base(GetOptions(configuration))
{
_configuration = configuration;
}
public DbSet<Movie> Movie { get; set; } = default!;
private static DbContextOptions GetOptions(IConfiguration configuration)
{
var optionsBuilder = new DbContextOptionsBuilder<WebApplication11Context>();
optionsBuilder.UseSqlServer(configuration.GetConnectionString("MyConnectionString"));
return optionsBuilder.Options;
}
}
应用程序设置:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"MyConnectionString": "Server=(localdb)\\mssqllocaldb;Database=WebApplication11Context-2372467b-a09c-4c4c-a4c1-3a81bbb6f823;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}