我有一个API,我已经从。net Core 3.1升级到。net 7。当试图连接到数据库时,它现在抛出一个错误。
错误是:
与服务器成功建立连接,但在登录过程中发生错误。(提供者:SSL提供者,错误:0 -证书链是由不受信任的机构颁发的。
我使用VS2022, SQL Server (mcr.microsoft.com/mssql/server:2022-latest)在Docker容器中运行。
我正在使用Docker Compose:
version: '3.9'
services:
sql-server-db:
image: "mcr.microsoft.com/mssql/server:2022-latest"
container_name: sql-server-db
environment:
MSSQL_SA_PASSWORD: "P@ssw0rd"
ACCEPT_EULA: "Y"
ports:
- "1433:1433"
volumes:
- sql1:/var/opt/mssql
volumes:
sql1:
external: false
连接字符串是
server=127.0.0.1,1433;Initial Catalog=xxx;user id=sa;password=P@ssw0rd;Encrypt=False;TrustServerCertificate=True
从我读过的帖子来看,Encrypt=False
或TrustServerCertificate=True
应该解决这个问题,但两者都没有帮助。
我已经确认SQL Server实例运行正常,我可以使用SSMS连接,使用连接字符串中的用户名和密码。
此外,我可以确认它可以与。net 6一起工作,所以它肯定是。net 7的问题& &;EntityFrameworkCore 7 .
我只添加了"信任服务器证书= true;在我更新我的应用程序后,我的连接字符串。尝试删除"Encrypt=False"
正如我之前在你的Mastodon帖子中提到的,这是一个针对几个问题的全面错误信息。
我通过使用持久性的标准卷来解决它,另一个人在GitHub问题上提到,我看到他们通过应用密码要求来解决它(我认为他们至少有8个字符,至少有一个小写字母,至少有一个大写字母,至少有一个数字和至少一个符号)。
我已经设法解决了这个问题。
我更改了存储库以注入IDbContextFactory<>并创建一个DbContext,而不是直接注入DbContext对象。
public BookRepository(IDbContextFactory<SampleAPIContext> dbContextFactory, IRestToLinqParser<Book> parser, ILogger<BookRepository> logger) : base(dbContextFactory, parser, logger)
{
}
并更改我的Startup.cs以添加IDbContextFactory而不是DBContext
services.AddDbContextFactory<SampleAPIContext>(
options => SqlServerDbContextOptionsExtensions.UseSqlServer(options, connectionString)
);
我不完全确定为什么这有不同,但确实如此。