Visual Studio 更新-数据库错误-初始化字符串的格式不符合从索引0开始的规范

5sxhfpxr  于 2023-05-07  发布在  其他
关注(0)|答案(1)|浏览(184)

对不起,我的英语。
总体观点:
VS 2022/ Razor项目
在W11 Pro机器上使用本地SQL 2019进行开发
在具有本地IIS和本地SQL 2022的W2022 Std计算机中进行生产
通过ftp协议发布的项目。
项目在这两种环境下都很好地工作。除了以下关于远程数据库更新的问题外,没有其他问题。
总结如下:

添加-迁移运行良好。添加并维护迁移
Update-Database运行良好。开发机器中本地SQL中的数据库得到正确更新和维护
Update-Database -Connection ProductionConnection(用于更新生产服务器中的数据库)失败,错误为:

生成已开始...
生成成功。
System.ArgumentException:初始化字符串的格式不符合从索引0开始的规范。

appsettings.json
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "DevelopmentConnection": "Server=WKSDEVELOPMENT\\SQLEXPRESS;uid=userdev;pwd=passworddev;Database=DBDevelopment;Encrypt=True;TrustServerCertificate=True;",
    "ProductionConnection": "Server=SRVPRODUCTION\\SQLEXPRESS;uid=userproduction;pwd=passwordproduction;Database=DBProduction;Encrypt=True;TrustServerCertificate=True;"
  }
}

两个密码中都没有特殊字符。只有字母和数字。

Program.cs
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Intranet.Data;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();

if (builder.Environment.IsDevelopment())
{
    builder.Services.AddDbContext<IntranetContext>(options =>
        options.UseSqlServer(builder.Configuration.GetConnectionString("DevelopmentConnection") ?? throw new InvalidOperationException("Connection string 'DevelopConnection' not found.")));
}
else
{
    builder.Services.AddDbContext<IntranetContext>(options =>
        options.UseSqlServer(builder.Configuration.GetConnectionString("ProductionConnection") ?? throw new InvalidOperationException("Connection string 'ProductionConnection' not found.")));
}

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();
IntranetContext.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Intranet.Model;
using Intranet.Models;
using Intranet.Models.Tabelle;
using EntityFramework.Exceptions.SqlServer;

namespace Intranet.Data
{
    public class IntranetContext : DbContext
    {
        public IntranetContext(DbContextOptions<IntranetContext> options)
            : base(options)
        {
        }

        public DbSet<Intranet.Model.Customer> Customer { get; set; }

        public DbSet<Intranet.Model.CustomerContacts> CustomerContacts { get; set; }
  }
}

正如我所说的,应用程序在两种环境下都能正常工作,所以我无法理解为什么两个连接字符串都能工作,但对于更新数据库例程来说“不好”。
希望我的解释清楚,并提前感谢任何帮助。
最好的问候。
马西莫

更新:

这里我有一个断点。

要添加另一个位:此外,命令Update-Database -Connection DevelopmentConnection结束时也出现相同的错误。

gg58donl

gg58donl1#

Update-Database -Connection ProductionConnection似乎需要一个有效的连接字符串,而不是appsettings.json的标识符;

  • 连接到数据库的连接字符串。默认值为AddDbContext或OnConfiguring中指定的值。
    https://learn.microsoft.com/en-us/ef/core/cli/powershell
    所以你可能需要的是跑
    Update-Database -Connection Server=WKSDEVELOPMENT\\SQLEXPRESS;uid=userdev;pwd=passworddev;Database=DBDevelopment;Encrypt=True;TrustServerCertificate=True;(我觉得你需要一个单斜杠在这里的服务器,但我不确定; WKSDEVELOPMENT\SQLEXPRESS。如果不起作用,请尝试将连接字符串用双引号括起来)
    我还可以想象运行Update-Database -Args '--environment Production'应该开箱即用。

相关问题