对不起,我的英语。
总体观点:
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结束时也出现相同的错误。
1条答案
按热度按时间gg58donl1#
Update-Database -Connection ProductionConnection
似乎需要一个有效的连接字符串,而不是appsettings.json的标识符;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'
应该开箱即用。